使用MUI图标替换Font Awesome实现星级评分动态展示出错如何解决
问题核心原因
你混淆了Font Awesome和MUI图标的渲染逻辑:
- Font Awesome是字体图标,依赖
<i>标签的className属性指定的类名渲染对应图标 - MUI的Star系列图标本身是独立的React组件,不能作为字符串传给
className属性,你现在的写法相当于把React组件对象塞进了类名字段,自然无法正常渲染。
修正后的代码
import React from 'react' import StarIcon from '@mui/icons-material/Star'; import StarBorderIcon from '@mui/icons-material/StarBorder'; import StarHalfIcon from '@mui/icons-material/StarHalf'; const Rating = ({ value, text, color = '#f8e825' }) => { return ( <div className='rating'> <span> {value >= 1 ? <StarIcon style={{ color }} /> : value >= 0.5 ? <StarHalfIcon style={{ color }} /> : <StarBorderIcon style={{ color }} />} </span> <span> {value >= 2 ? <StarIcon style={{ color }} /> : value >= 1.5 ? <StarHalfIcon style={{ color }} /> : <StarBorderIcon style={{ color }} />} </span> <span> {value >= 3 ? <StarIcon style={{ color }} /> : value >= 2.5 ? <StarHalfIcon style={{ color }} /> : <StarBorderIcon style={{ color }} />} </span> <span> {value >= 4 ? <StarIcon style={{ color }} /> : value >= 3.5 ? <StarHalfIcon style={{ color }} /> : <StarBorderIcon style={{ color }} />} </span> <span> {value >= 5 ? <StarIcon style={{ color }} /> : value >= 4.5 ? <StarHalfIcon style={{ color }} /> : <StarBorderIcon style={{ color }} />} </span> <span>{text && text}</span> </div> ) } export default Rating
主要修改点
- 移除了原来包裹图标的
<i>标签,直接在<span>内通过三元运算符返回对应MUI图标组件 - 把颜色参数直接传给每个MUI图标的
style属性,MUI组件会直接接收样式参数生效 - 给color参数加了默认黄色值,不传参数时也能正常显示图标颜色
内容的提问来源于stack exchange,提问作者Cody Dyar
相关产品推荐
相关产品推荐

