react加载优化(React星星评分组件的实现)
类别:编程学习 浏览量:296
时间:2021-11-03 15:41:26 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(<li key={i + 'full'} className="star fullstar"></li>) } // 渲染半星 if (halfstar) { for (let j = 0; j < halfstar; j++) { starjsx.push(<li key={j + 'half'} className="star halfstar"></li>) } } // 渲染灰色星 if (nullstar) { for (let k = 0; k < nullstar; k++) { starjsx.push(<li key={k + 'null'} className="star nullstar"></li>) } }
ok,我们想要的效果就实现啦
6. 手动评分
页面初次展示时,渲染 5 个灰色的星星。为每一个星星添加一个 click 事件。当点击之时,获取该星星所对应的下标 index,为其添加高亮的样式。
<li className="star-area"> {this.renderStar()} </li>
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( <li onClick={() => this.doEva(i)} key={i} className={cls}></li> ) } 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(<li key={i + 'full'} className="star fullstar"></li>) } // 渲染半星 if (halfstar) { for (let j = 0; j < halfstar; j++) { starjsx.push(<li key={j + 'half'} className="star halfstar"></li>) } } // 渲染灰色星 if (nullstar) { for (let k = 0; k < nullstar; k++) { starjsx.push(<li key={k + 'null'} className="star nullstar"></li>) } } return starjsx; } render() { return <li className="star-score">{this.renderScore()}</li>; } } export default StarScore;
StarScore.scss
.star-score { .star { width: 10px; height: 10px; float: left; background-size: cover; } .fullstar { background-image: url('./img/fullstar.jpg" alt="react加载优化(React星星评分组件的实现)" border="0" />
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( <li onClick={() => this.doEva(i)} key={i} className={cls}></li> ) } return array } render() { return ( <li className="content"> <li className="star-area"> {this.renderStar()} </li> </li> ); } } 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.jpg" alt="react加载优化(React星星评分组件的实现)" border="0" />
到此这篇关于React星星评分组件的实现的文章就介绍到这了,更多相关React星星评分内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue中的ref(Vue3.0中Ref与Reactive的区别示例详析)
- reactnative示例代码(React Native项目框架搭建的一些心得体会)
- react教程简介(react入门级详细笔记)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- react初学难点(使用react的7个避坑案例小结)
- react native常用组件(react native环境安装流程)
- reactnative ios(详解React Native与IOS端之间的交互)
- 使用react生命周期的常见情况(react+ts实现简单jira项目的最佳实践记录)
- react 分页列表优化(使用react-beautiful-dnd实现列表间拖拽踩坑)
- reactmap给了key仍然提示错误(react为什么不推荐使用index作为key)
- react usestate实现原理(浅谈react useEffect闭包的坑)
- react组件分析(react-diagram 序列化Json解读案例分析)
- react 查看word文件(React实现导入导出Excel文件)
- react高阶组件怎么用(React 高阶组件HOC用法归纳)
- react执行流程(React开启代理的2种实用方式)
- react组件封装成函数方法(React虚拟列表的实现)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
- 泪目 这位 刷屏 的英雄,是全椒人的骄傲(泪目这位刷屏)
- 人从众 火炎焱 全椒再现 正月十六走太平 的魅力(人从众火炎焱全椒再现)
- 官宣 全椒籍明星许海峰 奚秀兰 方芳 王璐瑶携手回家 走太平(全椒籍明星许海峰)
- 以前全椒人是怎么过冬的 满满都是回忆(以前全椒人是怎么过冬的)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
热门推荐
- dedecms缩略图优化教程(织梦DedeCMS V5.7缩略图站内上传修正)
- 面试怎么谈工资
- css3盒子布局(CSS3弹性伸缩布局之box布局)
- windows下搭建docker私有仓库(使用docker compose安装harbor私有仓库的详细教程)
- sqlserver访问远程数据库(SQL Server实现跨库跨服务器访问的方法)
- 阿里云服务ecs操作系统(阿里云ECS服务器CentOS7上安装服务器安全狗Linux版)
- pythonqt入门教程(使用python实现mqtt的发布和订阅)
- mysql常用的sql语句大全(mysql建表常用的sql语句汇总)
- pythonselenium自动化使用教程(selenium python 实现基本自动化测试的示例代码)
- python查找含特定字符的字符串(Python实现查找字符串数组最长公共前缀示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9