用React如何实现星星评分组件?
Admin 2021-09-24 群英技术资讯 537 次浏览
用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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是有关vue中tab切换页面实现的内容,tab切换页面的应用场景有很多,小编觉得挺实用的,因此分享给大家做个参考,下面是四种实现tab切换页面的方法,感兴趣的朋友可以参考。
每个前端项目都有 npm scripts,我们会用 npm scripts 来组织编译、打包、lint 等任务。 大家可能经常会跑 npm scripts,但却对这些命令行工具是怎么实现的并不了解。
本文主要介绍了JavaScript中let与const命令使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了vue 设置背景颜色及透明度的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
用JS怎样实现旋转轮播图,过程及代码是什么?下文的讲解详细,步骤过程清晰,对大家进一步学习和理解相关知识有一定的帮助。有这方面学习需要的朋友就继续往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008