react-admin配置Dashboard后Menu.DashboardItem报unique key警告如何解决
问题根源
这个警告是react-admin 4.0到4.1.1版本内置默认Menu组件的已知bug:当给<Admin>组件配置dashboard属性时,默认菜单会自动在顶部插入仪表盘入口,但循环渲染菜单项的逻辑里,漏给这个仪表盘菜单项传key属性,和你自己写的Dashboard组件、业务代码没有关系,移除dashboard属性后警告消失也正好对应了这个bug的触发条件。
不需要完全重写自定义Menu的解决方法
- 最省心的方案:直接把项目里的react-admin依赖升级到
4.1.2及以上版本,官方已经在这个版本修复了这个key缺失的问题,升级后不需要改任何业务代码,控制台警告会直接消除。 - 如果受项目依赖限制暂时没法升级:也不用从头手写完整的自定义Menu组件,只要写一个极薄的Menu包装层,复用react-admin内置的Menu组件和菜单项组件,手动给仪表盘菜单项补上固定key就行,不会改变默认菜单的任何原有行为,代码参考:
import { Menu, DashboardMenuItem } from 'react-admin'; // 仅补缺失的key,其余逻辑完全复用内置实现 const PatchedMenu = () => ( <Menu> <DashboardMenuItem key="system-dashboard" /> {/* 这行代码会自动渲染所有Resource对应的菜单项,和默认菜单行为完全一致 */} <Menu.ResourceItems /> </Menu> ); // 把修补后的Menu传给Admin组件的menu prop即可 const App = () => ( <Admin dashboard={Dashboard} authProvider={authProvider} dataProvider={dataProvider} menu={PatchedMenu} > <Resource name="Segments" list={SegmentsList} /> </Admin> );
注意:不要为了消除这个警告强行移除dashboard配置,或者给React加全局警告过滤,前者会丢失仪表盘的菜单入口,后者会把其他真正有用的key相关警告也屏蔽掉,不利于排查业务代码问题。
内容的提问来源于stack exchange,提问作者Dmitry Vasiliev
相关产品推荐
相关产品推荐

