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

如何在JavaScript菜单对象中正确引用React MUI图标组件?

解决React+MUI菜单对象中引用图标的正确方式

你遇到的语法错误是因为在JS对象里直接写了JSX渲染语法</InboxIcon>,这不符合JavaScript语法规则。正确的做法是直接存储图标组件的引用,而非渲染后的JSX元素。

步骤1:正确定义菜单数据对象

首先确保你已经导入了需要的MUI图标组件,然后在menuItems里将icon字段设为组件本身(不带尖括号):

// 先导入图标组件
import InboxIcon from '@mui/icons-material/Inbox';
// 其他需要的图标同理导入

const menuItems = {
  Text: [
    { name: 'TTS', path: 'textTTS', icon: InboxIcon, enabled: true },
  ],
  Image: [...],
  Video: [...],
  Live: [...],
};

步骤2:修改菜单渲染逻辑

在渲染ListItemIcon的时候,把存储的组件引用当作React组件来渲染(加上尖括号):

let menuComponents = Object.keys(menuItems).map((header) => {
  return (
    <List
      key={header}
      subheader={
        <ListSubheader component="div" id="nested-list-subheader">
          {header}
        </ListSubheader>
      }
    >
      {menuItems[header].map((item) => {
        const IconComponent = item.icon; // 取出组件引用
        return (
          <ListItem
            key={item.path}
            disablePadding
            sx={{ display: 'block' }}
            onClick={() => {
              navigate(item.path);
            }}
          >
            <ListItemButton disabled={!item.enabled}>
              <ListItemIcon>
                {/* 渲染图标组件 */}
                <IconComponent />
              </ListItemIcon>
              <ListItemText primary={item.name} />
            </ListItemButton>
          </ListItem>
        );
      })}
    </List>
  );
});

原理说明

React组件本质是JavaScript函数或类,把组件引用存在对象里和存普通函数引用一样,是合法的JS操作。之后在JSX中用<IconComponent />的方式调用,才会触发组件的渲染,这完全符合React的组件使用逻辑,也不会触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:15:29