ant5中,menu组件动态渲染icon问题

react17 + antd5开发

因为目前antd5移除了menu.item子级,而是通过menu组件的items属性来控制整个菜单的内容
eg:<Menu items={{ [菜单数组]  }}>
我的痛点是在渲染菜单前我需要对items处理,而icon是作为一个字符串存在数据库中,所以数据返回后我需要改为reactNode类型
经排查后

import * as Icon from "@ant-design/icons" //引入*以满足动态渲染
... ...
list.map(item=>{
   item.icon = React.createElement(Icons[item.icon])
})

但是前端却报错:

element type is invalid : expect a string (...) or a class/fuction (for...) but got undefined ...

前一天下班认为是自己的方法不对困扰许久,结果今早上再次看到报错就认真读了一遍,这个地方需要的是一个函数,类或者字符串,而我写的是一个reactNode,所以我直接就是一个

item.icon = ()=>React.createElement(Icons[item.icon])

结果,编译通过了但是控制台报了其他错

后来发现自己mock数据的icon字段设置有误

不能是"<XXX>" "<XXX / >" "/XXX"

直接改为"XXX"icon名称的字符串本身即可
因为自己粗心钻到死胡同,血泪经验供大家参考~


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design Pro ,如果二级菜单的 icon 不显示,可以尝试以下几种方法来解决: 1. 设置子菜单的 `icon` 属性 如果一个菜单项有子菜单,需要在该菜单项下添加一个 `children` 属性,并在该属性定义子菜单的菜单项。如果需要在子菜单显示 icon,可以在子菜单的菜单项设置 `icon` 属性,例如: ```javascript { path: '/parent', name: 'Parent', icon: 'smile', children: [ { path: '/child', name: 'Child', icon: 'smile', }, ], }, ``` 在上面的代码,我们在子菜单的菜单项设置了 `icon` 属性,这样就可以在子菜单显示 icon 了。 2. 设置子菜单的 `submenuRender` 属性 如果需要更加灵活地自定义子菜单的样式和显示内容,可以使用 `submenuRender` 属性来自定义子菜单的渲染方式。例如: ```javascript { path: '/parent', name: 'Parent', icon: 'smile', submenuRender: (menu, defaultSubMenuProps) => { return ( <SubMenu key={menu.path} title={menu.name} icon={menu.icon}> {defaultSubMenuProps.children} </SubMenu> ); }, children: [ { path: '/child', name: 'Child', icon: 'smile', }, ], }, ``` 在上面的代码,我们通过定义 `submenuRender` 属性,自定义了子菜单的渲染方式,并在渲染子菜单时设置了 `icon` 属性,这样就可以在子菜单显示 icon 了。 通过以上两种方法,可以解决 Ant Design Pro 二级菜单不显示 icon问题。需要注意的是,如果子菜单的 icon 仍然不显示,可能是因为设置的 icon 名称不正确或者 icon 组件没有正确引入等原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值