## 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://www.haodehen.cn/did222506