通常我会通过直接导入per the material-ui instructions来使用material-ui图标。
但是我有一个文本标记,它是实际的图标名称(如calendar_view_day
),需要动态地从中获取和呈现图标组件。
我怎么能这样的东西:
render() {
return (
<Icon name="calendar_view_day" color="primary" />
)
}
而不是:
render() {
return (
<CalendarViewDay color="primary" /> // Imported by name
)
}
5条答案
按热度按时间ymzxtsji1#
编辑:下面是MUI v4和MUI v5的答案(但未经我测试)
好吧,我想太多了。
正确答案
原来
material-ui
包含一个图标组件,允许您这样做...它自己转换名字,所以接受snake,pascal和其他变体。* 请注意,这将大大增加捆绑包的大小,正如评论中所指出的那样。如果你的捆绑包大小有限,你将不得不采取不同的方法从某处提供图标SVG!*上一个答案(工作正常,但大规模过度)
创建函数以:
然后使用material-ui Icon组件。
代码如下:
avwztpqn2#
MUI 5开发人员在这里。
typescript
lf5gs5x23#
vsdwdz234#
正如上面对 thclark 的回答的注解所述,使用Icon组件的解决方案将使用Material-UI图标的字体版本,它不包含完整的图标集。
通过使用相同的方法来获取正确的图标名称(借用自 thclark),并结合React.createElement来实现。我在TypeScript中做到了这一点,在vanilla JavaScript中甚至更容易。下面是TS版本的组件(dynamicIcon.tsx),也可以在this repo中使用:
yduiuuwa5#
从@mui导入整个图标增加了我的构建大小4 MB,这是我不想看到的,所以最后我像这样解决了它