React如何根据传入评分数值返回对应数量JSX元素优化星级评分实现
实现方案
你可以通过数组遍历的方式简化代码,以下是和你原有逻辑完全对齐、同时更简洁易维护的实现:
import { FaStar, FaRegStar } from 'react-icons/fa'; const getStars = (rate) => { // 限制评分范围在1-5之间,向上取整和原有判断逻辑完全一致 const normalizedRate = Math.ceil(Math.min(Math.max(rate, 1), 5)); return ( <> {Array.from({ length: 5 }, (_, index) => index < normalizedRate ? <FaStar key={index} /> : <FaRegStar key={index} /> )} </> ); };
逻辑说明
- 首先做了参数合法性处理:不管传入的参数是小于1、大于5的异常值,还是小数,都会先被规整到1-5的范围内,避免运行异常
- 用
Array.from直接生成长度为5的数组,遍历过程中判断当前索引是否小于规整后的评分值,对应返回填充/空心星星,天然避免了大量冗余的条件判断 - 如果你的业务后续需要支持半星评分,只需要新增半星组件、再加一层小数位的判断即可,扩展成本极低
- 如果需要改成“评分向下取整(比如1.9分只显示1颗填充星)”的逻辑,把
Math.ceil换成Math.floor即可;如果需要按四舍五入计算评分,替换成Math.round即可
内容的提问来源于stack exchange,提问作者Monoxyd
相关产品推荐
相关产品推荐

