在React中使用antd的Menu菜单 刷新后自动检索选中的菜单

在React中使用antd的Menu菜单 刷新后自动检索选中的菜单

代码

import React from ‘react’;
import Link from ‘@coms/Link’;
import { Menu } from ‘antd’;
import ‘./index.less’;
import { withRouter } from ‘react-router-dom’;
const { SubMenu } = Menu;
class sideBar extends React.Component {

constructor(props) {
    super(props);
    this.option = this.getPropsKey(props);
}

componentWillReceiveProps(nextProps) {
    if (nextProps.location && nextProps.location.pathname !==    this.props.location.pathname) {
        this.option = this.getPropsKey(nextProps)
    }
}

renderMenu = () => {
    return this.props.menuList.map((item, index) => {
        if (item.sub) {
            const subItem = item.sub.map((sub, i) => {
                return (
                    <Menu.Item key={`subitem${index}${i}`}>
                        <Link to={sub.path || ''} external={sub.external} newTab={sub.newTab} >{sub.value}</Link>
                    </Menu.Item>
                );
            });
            return (
                <SubMenu
                    key={`sub${index}`}
                    disabled={!!item.disabled}
                    title={<span><span>{item.value}</span></span>}
                >
                    {subItem}
                </SubMenu>
            );
        } else {
            return (
                <Menu.Item key={`sub${index}`} >
                    <Link to={item.path || ''} external={item.external} newTab=            {item.newTab} >{item.value}</Link>
                </Menu.Item>
            );
        }
    })
}

getPropsKey = (props) => {
    const { location, menuList } = props;
    console.log(props);
    let key, index;
    menuList.forEach((item, $i) => {
        if (item.sub && item.sub.length) {
            item.sub.forEach((sub, $$i) => {
                if (pathname === sub.path || pathname.includes(sub.path)) {
                    key = $i;
                    index = $$i
                }
            });
        } else if (pathname == item.path || pathname.includes(item.path)) {
            key = $i
        }
    });
    let defaultOpenKeys, defaultSelectKeys;
    if (key !== undefined) {
        defaultOpenKeys = `sub${key}`;
    }
    if (index !== undefined) {
        defaultSelectKeys = `subitem${key}${index}`;
    }
    return {
        defaultOpenKeys: defaultOpenKeys || '',
        defaultSelectKeys: defaultSelectKeys || ''
    }
}
render() {
    const { defaultSelectKeys, defaultOpenKeys } = this.option;
    const defaultSelect = {};
    if (defaultSelectKeys) {
        defaultSelect.defaultOpenKeys = [defaultOpenKeys];
        defaultSelect.defaultSelectKeys = [defaultSelectKeys];
        defaultSelect.selectable = [defaultOpenKeys];
        defaultSelect.selectedKeys = [defaultSelectKeys];
    } else {
        defaultSelect.defaultSelectKeys = [defaultOpenKeys];
        defaultSelect.selectedKeys = [defaultOpenKeys];

    }

    return (
        <div>

            <React.Fragment>
                <Menu
                    {...defaultSelect}
                    mode='inline'
                    theme='dark'
                >
                    {this.renderMenu()}
                </Menu>
            </React.Fragment>
        </div>
    );
}

}
export default withRouter(sideBar);

menuList数据格式:

export const menuList = [

{ value: '首页', id: 'page_login', path: '/home' },
{ value: '测试', id: 'page_go', sub: [
        { value: '测试GO', id: 'page_go_ceshi', path: '/ceshi1' },
    ]
}

]

Link代码

在这里插入图片描述

应用

import SideBar from ‘@coms/sidebar/index’; 在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值