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

React动态Icon渲染异常:导入别名图标无法正常显示

解决React Icons数组渲染不显示的问题

核心问题

你传入icon属性的是React图标组件本身(比如Cctv这个函数/类),而不是组件实例化后的JSX元素。React Icons导出的是组件,必须以<组件名 />的形式才能渲染出图标。

直接修复方案

把icon={Eachextra}改成icon={<Eachextra />},同时注意label属性直接传组件会显示[object Object],建议改用组件的name属性或自定义文本:

const defaultExtras = [Cctv, BiCctv ]

{defaultExtras.map((Eachextra) => (
        <div key={Eachextra.name} className="createBusBodyEachStopContainer">
          <Chip
            color="info"
            onDelete={() => handleRemoveExtras(Eachextra)}
            label={Eachextra.name}
            deleteIcon={<IoClose />}
            icon={<Eachextra />} {/* 关键修改:实例化组件为JSX元素 */}
          />
        </div>
      ))}

更优雅的写法(推荐)

如果需要自定义标签文本,建议把数组改成包含组件和对应标签的对象,避免依赖组件的name属性:

// 重构数组结构,明确组件和标签对应关系
const defaultExtras = [
  { Icon: Cctv, label: "监控" },
  { Icon: BiCctv, label: "基础监控" }
]

{defaultExtras.map(({ Icon, label }) => (
        <div key={label} className="createBusBodyEachStopContainer">
          <Chip
            color="info"
            onDelete={() => handleRemoveExtras(Icon)}
            label={label}
            deleteIcon={<IoClose />}
            icon={<Icon />}
          />
        </div>
      ))}

为什么直接传组件不行?

React组件本质是函数或类,当你写<Cctv />时,相当于调用React.createElement(Cctv)生成了一个可渲染的JSX元素对象。而直接把Cctv(组件本身)传给icon属性,Chip组件只会拿到一个函数/类,无法将其渲染为DOM元素。

内容的提问来源于stack exchange,提问作者talatam sri manikanta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:21:39