## 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;
查看更多关于react + antd实现动态菜单的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did222506