You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:54:08