antd菜单组件递归遍历渲染

import React, {
          
    Component } from react
import {
          
    Link } from react-router-dom
import "./menu.less"
import {
          
    menuData } from "@/router/router.js"
import {
          
    Menu } from antd;
const {
          
    SubMenu } = Menu;
export default class Menus extends Component {
          
   
    menuTag = function deep(menuData) {
          
   
        if (menuData && menuData.length > 0) {
          
   
            return menuData.map(item => {
          
   
                if (item.children && item.children.length > 0) {
          
   
                    return (<SubMenu key={
          
   item.path} icon={
          
   item.icon} title={
          
   item.title}>
                        {
          
   deep(item.children)}
                    </SubMenu>)
                }
                return (<Menu.Item key={
          
   item.path} icon={
          
   item.icon}>
                    <Link to={
          
   item.path}>{
          
   item.title}</Link>
                </Menu.Item>)
            })
        }
    }
    render() {
          
   
        return (
            <Menu
                // defaultSelectedKeys={[/home]}
                // defaultOpenKeys={[/components]}
                mode="inline"
                theme="dark"
            >
                {
          
   this.menuTag(menuData)}
            </Menu>
        )
    }
}

路由数据

import React from react
import {
          
   
    HomeOutlined,
    HighlightOutlined,
    BarsOutlined,
    MenuOutlined,
    QqOutlined,
    UsergroupDeleteOutlined,
    WechatOutlined,
    AndroidOutlined,
    AreaChartOutlined,
    UnderlineOutlined,
    AppstoreOutlined,
    EditOutlined,
    AppstoreAddOutlined,
    DragOutlined,
    PlusSquareOutlined,
    OrderedListOutlined
} from @ant-design/icons;
const menuData = [
    {
          
   
        path: /home,
        title: 首页,
        icon: <HomeOutlined />
    },
    {
          
   
        path: /icon,
        title: 图标,
        icon: <UnderlineOutlined />
    },
    {
          
   
        path: /components,
        title: 常用组件,
        icon: <AppstoreOutlined />,
        children: [
            {
          
   
                path: /components/editor,
                title: 富文本,
                icon: <EditOutlined />
            },
            {
          
   
                path: /components/Markdown,
                title: Markdown,
                icon: <HighlightOutlined />
            },

        ]
    },
    {
          
   
        path: /drop,
        title: 拖拽 移动,
        icon: <AppstoreAddOutlined />,
        children: [
            {
          
   
                path: /drop/dialog,
                title: 模态框拖拽,
                icon: <DragOutlined />
            },
            {
          
   
                path: /drop/table,
                title: 表格拖拽,
                icon: <PlusSquareOutlined />
            }
        ]
    },
    {
          
   
        path: /user,
        title: 用户管理,
        icon: <UsergroupDeleteOutlined />,
    },
    {
          
   
        path: /role,
        title: 角色管理,
        icon: <AndroidOutlined />,
    },
    {
          
   
        path: /table,
        title: 表格,
        icon: <OrderedListOutlined />,
    },
    {
          
   
        path: /charts,
        title: 图表,
        icon: <AreaChartOutlined />,
    },
    {
          
   
        path: /menu,
        title: 多级菜单,
        icon: <BarsOutlined />,
        children: [
            {
          
   
                path: /menu/level,
                title: 二级菜单,
                icon: <MenuOutlined />,
                children: [
                    {
          
   
                        path: /menu/level/submenu-1,
                        title: 三级菜单1,
                        icon: <WechatOutlined />
                    },
                    {
          
   
                        path: /menu/level/submenu-2,
                        title: 三级菜单2,
                        icon: <QqOutlined />
                    }
                ]
            }
        ]
    },
];
经验分享 程序员 微信小程序 职场和发展