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

React Admin子菜单点击标题/Chevron展开失效问题求助

React Admin 二级子菜单导航问题解决方案

问题1:MenuItem的linkDisabled无效,点击文本触发仪表盘跳转

原因

@react-admin/ra-navigation 的 MenuItem 组件中,linkDisabled 属性无法完全阻止导航行为,当设置 to='' 时会默认跳转到根路径(仪表盘)。

解决方案

移除 to 属性,通过 onClick 手动阻止默认行为并触发展开/收起逻辑:

// 替换注释掉的MenuItem代码
<MenuItem
  name={subGroup[0].options.subGroup}
  label={`${subGroup[0].options.subGroup} (${subGroupTools.length})`}
  icon={curIcon}
  onClick={(e) => {
    e.preventDefault(); // 阻止默认导航
    handleClick(); // 执行展开/收起
  }}
> 
  {subGroupTools}
</MenuItem>

无需设置 linkDisabled 和 to='',因为该菜单项仅作为子菜单容器,不需要导航功能。


问题2:ListItem点击后菜单自动关闭

原因

父级 Menu 组件(来自 @react-admin/ra-navigation)会在内部元素被点击时自动关闭,ListItem的点击事件会冒泡到父级Menu,触发关闭逻辑。

解决方案

在点击事件中阻止事件冒泡,避免父级Menu捕获到点击动作:

// 修改SubMenuItemMapper中的handleClick和ListItem
const handleClick = (e) => {
  e.stopPropagation(); // 阻止事件冒泡
  setOpen(prev => !prev);
};

// ...

<ListItem button onClick={handleClick}>
  <ListItemIcon>{curIcon}</ListItemIcon>
  <ListItemText primary={`${subGroup[0].options.subGroup} (${subGroupTools.length})`} />
  {open ? <ExpandLess /> : <ExpandMore />}
</ListItem>

这样点击ListItem的任何区域(文本、图标、箭头)都能触发展开/收起,同时不会导致父级菜单关闭。


优化后的完整SubMenuItemMapper组件

const SubMenuItemMapper = (subGroup, groupName) => {
  const [open, setOpen] = useState(false);

  const handleClick = (e) => {
    e.stopPropagation(); // 阻止事件冒泡,避免父级菜单关闭
    setOpen(prev => !prev);
  };
  
  let subGroupTools = [];
  let curIcon = <PillarIcon />;
  
  if (subGroup.length > 0) {
    subGroupTools = subGroup.map(MenuItemMapper(groupName));
    curIcon = createElement(subGroup[0].icon);
  }
  
  return (
    <MultiLevelMenu id="appSubMenu">
       <ListItem button onClick={handleClick}>
        <ListItemIcon>{curIcon}</ListItemIcon>
        <ListItemText primary={`${subGroup[0].options.subGroup} (${subGroupTools.length})`} />
        {open ? <ExpandLess /> : <ExpandMore />}
      </ListItem>
      <Collapse in={open} timeout="auto" unmountOnExit>
        <List component="div" disablePadding>
          {subGroupTools}
        </List>
      </Collapse>
    </MultiLevelMenu>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:03:23