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

React中如何将图标组件设为对象属性?代码优化报错求解

解决React中分离分类图标数据文件的问题

方案一:数据文件直接存储图标组件(推荐)

创建单独的数据文件(比如categoryData.js),先导入所需的图标组件,再导出包含图标的配置数组:

// categoryData.js
import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder';
import ExploreIcon from '@mui/icons-material/Explore';
import StarBorderPurple500Icon from '@mui/icons-material/StarBorderPurple500';

export const categoryList = [
  {
    name: 'Favourites',
    Icon: FavoriteBorderIcon, // 存储组件本身而非实例
  },
  {
    name: 'Explore',
    Icon: ExploreIcon,
  },
  {
    name: 'Watchlist',
    Icon: StarBorderPurple500Icon,
  },
];

在业务组件中导入并渲染:

import { categoryList } from './categoryData';

// ...

<List>
  {categoryList.map((category) => (
    <ListItem button key={category.name}>
      <ListItemIcon>
        {/* 动态渲染组件并传入样式类 */}
        <category.Icon className={classes.icon} />
      </ListItemIcon>
      <ListItemText primary={category.name} />
    </ListItem>
  ))}
</List>

方案二:通过字符串映射图标组件

如果已经用字符串存储图标名称,可创建一个映射对象关联字符串与组件:

// categoryData.js
export const categoryList = [
  {
    name: 'Favourites',
    iconName: 'FavoriteBorder',
  },
  {
    name: 'Explore',
    iconName: 'Explore',
  },
  {
    name: 'Watchlist',
    iconName: 'StarBorderPurple500',
  },
];

在业务组件中导入图标并完成映射:

import { categoryList } from './categoryData';
import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder';
import ExploreIcon from '@mui/icons-material/Explore';
import StarBorderPurple500Icon from '@mui/icons-material/StarBorderPurple500';

// 建立字符串到组件的映射
const iconMap = {
  FavoriteBorder: FavoriteBorderIcon,
  Explore: ExploreIcon,
  StarBorderPurple500: StarBorderPurple500Icon,
};

// ...

<List>
  {categoryList.map((category) => {
    const IconComponent = iconMap[category.iconName];
    return (
      <ListItem button key={category.name}>
        <ListItemIcon>
          <IconComponent className={classes.icon} />
        </ListItemIcon>
        <ListItemText primary={category.name} />
      </ListItem>
    );
  })}
</List>

内容的提问来源于stack exchange,提问作者rumon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:30:54