我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React星星评分组件的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React星星评分组件的实现

实现的需求为传入对商品的评分数据,页面显示对应的星星个数。

1. 准备三张对应不同评分的星星图片

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2. 期望实现的效果

这样的

在这里插入图片描述

调用


<StarScore score={data.wm_poi_score}/>

3. 对传入的数据进行处理

我们需要得到评分的整数和小数部分


let wm_poi_score = this.props.score || '';
let score = wm_poi_score.toString();
let scoreArray = score.split('.');

如果传入 4.7 ,那么得到的 scoreArray 就是['4', '7']

4. 根据数据计算对应的星星个数


// 满星个数
let fullstar = parseInt(scoreArray[0]);
// 半星个数
let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
// 灰色星个数
let nullstar = 5 - fullstar - halfstar;

5. 根据星星个数,渲染组件


let starjsx = [];
// 渲染满星
for (let i = 0; i < fullstar; i++) {
  starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
}
// 渲染半星
if (halfstar) {
  for (let j = 0; j < halfstar; j++) {
    starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
  }
}
// 渲染灰色星
if (nullstar) {
  for (let k = 0; k < nullstar; k++) {
    starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
  }
}

ok,我们想要的效果就实现啦

6. 手动评分

在这里插入图片描述

页面初次展示时,渲染 5 个灰色的星星。为每一个星星添加一个 click 事件。当点击之时,获取该星星所对应的下标 index,为其添加高亮的样式。


<div className="star-area">
  {this.renderStar()}
</div>

doEva(i) {
  this.setState({
    startIndex: i + 1
  });
}

renderStar() {
  let array = []
  for (let i = 0; i < 5; i++) {
    let cls = i >= this.state.startIndex ? "star-item" : "star-item light"
    array.push(
      <div onClick={() => this.doEva(i)} key={i} className={cls}></div>
    )
  }
  return array
}

完整代码


import React from 'react';
import './StarScore.scss';

// 渲染5颗星得分方法
class StarScore extends React.Component {
  renderScore() {
    let wm_poi_score = this.props.score || '';
    let score = wm_poi_score.toString();
    let scoreArray = score.split('.');
    // 满星个数
    let fullstar = parseInt(scoreArray[0]);
    // 半星个数
    let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
    // 灰色星个数
    let nullstar = 5 - fullstar - halfstar;
    let starjsx = [];

    // 渲染满星
    for (let i = 0; i < fullstar; i++) {
      starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
    }
    // 渲染半星
    if (halfstar) {
      for (let j = 0; j < halfstar; j++) {
        starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
      }
    }
    // 渲染灰色星
    if (nullstar) {
      for (let k = 0; k < nullstar; k++) {
        starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
      }
    }
    return starjsx;
  }
  render() {
    return <div className="star-score">{this.renderScore()}</div>;
  }
}

export default StarScore;

StarScore.scss


.star-score {
  .star {
    width: 10px;
    height: 10px;
    float: left;
    background-size: cover;
  }

  .fullstar {
    background-image: url('./img/fullstar.png');
  }

  .halfstar {
    background-image: url('./img/halfstar.png');
  }

  .nullstar {
    background-image: url('./img/gray-star.png');
  }
}

import './Main.scss';
import React from 'react';

class Main extends React.Component {
  constructor(props) {
    super(props);
    }
  }
  
  
  doEva(i) {
    this.setState({
      startIndex: i + 1
    });
  }
  
  renderStar() {
    let array = []
    for (let i = 0; i < 5; i++) {
      let cls = i >= this.state.startIndex ? "star-item" : "star-item light"
      array.push(
        <div onClick={() => this.doEva(i)} key={i} className={cls}></div>
      )
    }
    return array
  }
  render() {
    return (
      <div className="content">
        <div className="star-area">
            {this.renderStar()}
          </div>
      </div>
    );
  }
}

export default Main;

.content {
  height: 100%;
  .eva-content {
    background-color: #fff;
    overflow: hidden;
    margin: px2rem(10px);
    margin-top: px2rem(74px);
  }
  .star-area {
    text-align: center;
    margin-top: px2rem(30px);
  }
  .star-item {
    width: px2rem(32px);
    height: px2rem(32px);
    background-image: url('./img/gray-star.png');
    background-size: cover;
    display: inline-block;
    margin-right: px2rem(10px);

    &.light {
      background-image: url('./img/light-star.png');
    }
  }
}

到此这篇关于React星星评分组件的实现的文章就介绍到这了,更多相关React星星评分内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React星星评分组件的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android RatingBar星星评分控件实例代码

效果图:直接上代码:xml文件: 2023-05-31

react怎么实现五星评价

react实现五星评价的方法:1、设置五个元素,根据评分给不同的样式,实现代码如“starNum:['star0','star0','star0','star0','star0']...”;2、设置两个元素,根据评分设置子元素的宽度来遮挡父元素的背景图,实现代码如“ let num=(Math.round(this.props.star)/2)...”。
2023-05-14

Android UI控件RatingBar实现自定义星星评分效果

本文实例为大家分享了Android RatingBar星星评分效果的具体代码,供大家参考,具体内容如下 继承关系 AppCompatRatingBar效果图xml
2022-06-06

react如何实现五星评价功能

这篇文章主要介绍了react如何实现五星评价功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react如何实现五星评价功能文章都会有所收获,下面我们一起来看看吧。react实现五星评价的方法:1、设置五个元素
2023-07-04

ExtJS(3)- 自定义组件(星级评分

今天介绍ExtJS的组件开发,这里以星级评分为示例,首先来看看效果图:    然后是功能操作:鼠标移动到五个星星上面时,会有tooltip显示当前的分值。如图:鼠标悬停在第四颗星星时前四颗星星显示高亮笑脸,当点击下去时锁定笑脸并且设定份数为
2023-01-31

怎么在css中实现一个评分星星效果

本篇文章为大家展示了怎么在css中实现一个评分星星效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。结构如下:很简单的结构,主要核心代码如下:
2023-06-08

Android开发中使用RatingBar UI控件实现一个星星评分功能

这期内容当中小编将会给大家带来有关Android开发中使用RatingBar UI控件实现一个星星评分功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体内容如下继承关系AppCompatRatingB
2023-05-31

Android中怎么实现星级评分条

今天就跟大家聊聊有关Android中怎么实现星级评分条,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、getRating()方法:获取等级,表示你当前选中了几颗星星2、getSte
2023-05-30

Android开发怎么实现RatingBar星级评分控件

本篇内容介绍了“Android开发怎么实现RatingBar星级评分控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实践过程初识Ratin
2023-07-02

微信小程序如何实现星级评分

这篇文章主要为大家展示了“微信小程序如何实现星级评分”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序如何实现星级评分”这篇文章吧。具体内容如下第一种方法:WXML代码:
2023-06-25

编程热搜

目录