用React如何实现星星评分组件?
Admin 2021-09-24 群英技术资讯 1300 次浏览
用React如何实现星星评分组件?评分插件在一些购物应用上常常会使用的到,例如用星星评分的效果,那么这一效果是怎样做的呢?下面给大家分享一下用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实现星星评分组件的内容,上述代码有一定的参考价值,有需要的朋友可以借鉴学习,希望对大家学习JavaScript有帮助,想要了解更多评分组件的实现,请浏览其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
异步编程是指由于异步I/O等因素,无法同步获得执行结果时,在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。示例:for(vari=1;i<=3;i++){setTimeout(function(){console.log(i);},0);};这里大部分人会认为输出123,或者333。其实它会输出444这里就
目录配置sass及引入外部scss文件配置sass引入外部scss文件如果显示错误为如下图所示记住此时需要重启项目 npm run dev踩过的坑 Vue引入Sass文件问题来了,为什么呢?配置sass及引入外部scss文件配置sass安装对应依赖node模块npm install node-sass --save-d
目录1 计算属性实现模糊查询2 watch 监听实现模糊查询3 通过按钮点击实现模糊查询1 计算属性实现模糊查询vue 中通过计算属性实现模糊查询,创建 html 文件,代码直接放入即可。这里自己导入 vue,我是导入本地已经下载好的。script src=./lib/vue-2.6.12.js/script演示:打开
这篇文章讲述了React的基本介绍,基本使用和React相关js库.通过这篇文章可以入门React的使用,可以快速上手使用React进行代码的编写
js不会保护hasOwnProperty被非法占用,如果一个对象碰巧存在这个属性, 就需要使用外部的hasOwnProperty 函数来获取正确的结果。当检查对象上某个属性是否存在时,hasOwnProperty 是唯一可用的方法。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008