react-admin自定义用户菜单出现TS2740类型缺失错误如何解决?
报错触发原因
- 你没有将父组件(
UserMenu)注入的全量属性透传给内部的MenuItemLink组件。UserMenu的子组件会自动收到react-admin和Material UI注入的selected、dense、className等数百个属性,你仅手动传递了ref和onClick,缺失的属性触发了TS2740类型校验失败。 - 你将
sidebarIsOpen属性写死为true,没有和父组件传递的侧边栏状态同步,也会导致属性匹配异常。 - 自定义菜单项组件没有接收
UserMenu传递的props,直接空置传参,导致上游属性完全没有传递到MenuItemLink层。
修复方案
按如下修改代码即可解决报错:
import SettingsIcon from '@material-ui/icons/Settings'; import { forwardRef } from 'react'; import { MenuItemLink, UserMenu, AppBar } from 'react-admin'; const ConfigurationMenu = forwardRef<any, any>((props, ref) => ( <MenuItemLink ref={ref} {...props} // 透传所有父组件属性,补全缺失的类型字段 to="/metamaskLogin" primaryText="MetaMask" leftIcon={<SettingsIcon />} onClick={props.onClick} sidebarIsOpen={props.sidebarIsOpen} // 从props读取侧边栏状态,不要写死 /> )); const MyUserMenu = (props: any) => ( <UserMenu {...props}> <ConfigurationMenu {...props} /> // 透传UserMenu注入的属性到自定义组件 </UserMenu> ); export const MyAppBar = (props: any) => <AppBar {...props} userMenu={<MyUserMenu />} />;
可选优化
- 可将
forwardRef的泛型any替换为MenuItemLink的官方导出类型,完全消除any类型的不严谨问题 - 不需要额外修改
onClick逻辑,透传的props已内置点击后自动关闭用户菜单的能力
内容的提问来源于stack exchange,提问作者ReiGun
相关产品推荐
相关产品推荐

