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

如何封装Antd Menu公共组件并支持Menu.Item等子组件调用?

解决Antd Menu封装后无法使用子组件的问题

你需要把Antd原生Menu的子组件挂载到自定义Menu组件的属性上,而非单独导出。因为Antd的Menu.Item、Menu.SubMenu这些是作为Menu组件的静态属性存在的,自定义组件要复刻这个结构才能保持原生使用习惯。

修改后的Menu.js代码如下:

import React from 'react';
import { Menu as AntMenu } from 'antd';

// 定义自定义Menu组件
const Menu = ({ items, ...extraAttributes }) => {
  return (
    <AntMenu
      items={items}
      {...extraAttributes}
    />
  );
};

// 将Antd Menu的子组件挂载到自定义Menu上
Menu.Item = AntMenu.Item;
Menu.SubMenu = AntMenu.SubMenu;
Menu.ItemGroup = AntMenu.ItemGroup;

export default Menu;

业务组件中使用方式

现在你可以在业务代码里直接导入自定义Menu,完全按照原生Antd Menu的方式调用子组件:

import Menu from './Menu';

const App = () => {
  return (
    <Menu mode="vertical">
      <Menu.Item key="1">菜单项1</Menu.Item>
      <Menu.SubMenu key="sub1" title="子菜单">
        <Menu.Item key="2">子菜单项1</Menu.Item>
      </Menu.SubMenu>
      <Menu.ItemGroup key="group1" title="菜单项组">
        <Menu.Item key="3">组内项1</Menu.Item>
      </Menu.ItemGroup>
    </Menu>
  );
};

export default App;

为什么之前的方法无效

你之前单独导出SubMenu、Item的方式,要求业务代码单独导入这些子组件(比如import { Menu, Item } from './Menu'),这和原生Antd的使用逻辑不符。而把它们挂载到自定义Menu的属性上,就能完全对齐原生API的使用方式,保持代码一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:57:07