• react + antd实现动态菜单


    ## react + antd实现动态菜单

    import React, { Component } from 'react';
    import { Menu } from 'antd';
    import history from '../../router/history';
    const { SubMenu } = Menu;
    interface Props {
    
    }
    type stateType = {
        menuList: {}[]
    }
    type itemType = {
        id: '',
        path: '', // 页面跳转路劲
        title: '',  // 菜单名称
        icon: '',  // 图标
        show: boolean,  // 是否显示该菜单
        children: []  // 子级菜单
    }
    // 模拟数据
    const mList = [
        {
            id: '01',
            path: '',
            title: '用户管理',
            icon: '',
            show: true,
            children: [
                {
                    id: '0101',
                    path: '',
                    title: '个人信息',
                    icon: '',
                    show: true,
                    children: [
                        {
                            id: '010101',
                            path: '',
                            title: '基本信息',
                            icon: '',
                            show: true,
                            children: []
                        },
                        {
                            id: '010102',
                            path: '',
                            title: '附加信息',
                            icon: '',
                            show: false,
                            children: []
                        }
                    ]
                }
            ]
        },
        {
            id: '01',
            path: '',
            title: '角色管理',
            icon: '',
            show: false,
            children: []
        }
    ]
    class SiderLeft extends Component<Props, stateType> {
        constructor(props) {
            super(props);
            console.log('props', props);
            this.state = {
                menuList: mList
            }
            this.renderMenuItem.bind(this);
        }
        renderMenuItem(navList: {}[]) {
            return navList.map((item: itemType, index: number) => {
                if(item.children && item.children.length){
                    return item.show ? <SubMenu key={item.id + index} title={item.title}>
                    { this.renderMenuItem(item.children) }
                    </SubMenu> : null
                }
                return item.show ? <Menu.Item key={item.id + index} onClick={() => { history.push(item.path) }}>{item.title}</Menu.Item> : null
            })
        }
        render() {
            
            return (
                <Menu theme="dark" mode="inline">
                    {
                        this.state.menuList.map((item: itemType, index: number) => {
                            if(item.children && item.children.length){
                                return item.show ? <SubMenu  key={item.id + index} title={item.title}>
                                { this.renderMenuItem(item.children) }
                                </SubMenu> : null
                            }
                            return item.show ? <Menu.Item key={item.id + index} onClick={() => { history.push(item.path) }}>{item.title}</Menu.Item> : null
                        })
                    }
                </Menu>
            );
        }
    }
    
    export default SiderLeft;

    history.js

    import { createHashHistory } from 'history';
    const history = createHashHistory();
    export default history;
  • 相关阅读:
    STM32 串口DMA方式接收(转)
    STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)
    内存泄露调试心得
    Android 5.0 5.1 webview 闪退问题
    ios 接入微信开发 新版
    ios 获取app版本号
    ios alamofire4.x网络框架url 中文问题
    微服务监控druid sql
    kotlin 单例模式
    mysql 数据库保存 微信分享时不能换行
  • 原文地址:https://www.cnblogs.com/min77/p/14677690.html
Copyright © 2020-2023  润新知