react实现菜单权限控制的方法


Posted in Javascript onDecember 11, 2017

通常公司的后台管理系统都需要权限控制,即不同的角色用户看到不同的菜单,如下图:

react实现菜单权限控制的方法

下面,通过react实现这样的后台管理系统(脚手架),功能简介:

1.顶部的菜单项根据用户的角色动态生成。

2.侧边测菜单项根据已选的顶部菜单动态生成。

直接上代码:

路由配置:

export default (
  <Route path="/" component={App}>
    <IndexRoute component={EmployeeList}/>
    <Route path="/employee" component={Employee}>
      <IndexRoute component={EmployeeList}/>
      <Route path="/employee/list" component={EmployeeList}/>
      <Route path="/employee/detail/:id" component={EmployeeDetail}/>
    </Route>
    <Route path="/goods" component={Goods}>
      <IndexRoute component={GoodsList}/>
      <Route path="/goods/list" component={GoodsList}/>
      <Route path="/goods/detail/:id" component={GoodsDetail}/>
    </Route>
  </Route>
)

顶部菜单项单独成了一个组件:

// 动态数据
import React, { Component } from 'react'
import { Link } from 'react-router' // 引入Link处理导航跳转
import { connect } from 'react-redux'
import { fetchPostsIfNeeded, updateSubMenuWhenClick } from '../actions/count'
import { Menu } from 'antd';
class TopMenu extends Component {
  constructor(props){
    super(props);
    this.handleMenuClick = this.handleMenuClick.bind(this);
  }

  handleMenuClick(e){
    // console.log(e.item.props['data-menukey']);
    const { updateSubMenuWhenClick } = this.props
    updateSubMenuWhenClick(true, e.item.props['data-menukey'])
  }
  componentWillMount() {
  }
  componentDidMount() {
    const { fetchPostsIfNeeded } = this.props
    fetchPostsIfNeeded()
  }
  render() {
    const { menuList, fetchPostsIfNeeded } = this.props
    if(menuList.length != 0) {
      fetchPostsIfNeeded(true, menuList[0].key)
    }

    return (
      <Menu
        theme="dark"
        mode="horizontal"
        defaultSelectedKeys={['0']}
        style={{ lineHeight: '64px' }}
        onClick={this.handleMenuClick}
      >
      {
        menuList.map((e, index) => 
          <Menu.Item key={index} data-menukey={e.key} >
            <Link to={{ pathname: e.url }} >{e.name}</Link>
          </Menu.Item>
        )
      }
      </Menu>
    )
  }
}

const getList = state => {
  return {
    menuList: state.update.menuList
  }
}

export default connect(
  getList, 
  { fetchPostsIfNeeded, updateSubMenuWhenClick }
)(TopMenu)

在render函数中,如果动态生成的顶部菜单数据长度不为0,则根据顶部菜单的key动态生成侧边菜单项。

const { menuList, fetchPostsIfNeeded } = this.props
    if(menuList.length != 0) {
      fetchPostsIfNeeded(true, menuList[0].key)
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
JavaScript基础知识点归纳(推荐)
Jul 09 Javascript
JS实现页面数据无限加载
Sep 13 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
Dec 04 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
Vue中props的详解
May 16 Javascript
Vue触发隐藏input file的方法实例详解
Aug 14 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
Angular 作用域scope的具体使用
Dec 11 #Javascript
angularjs实现柱状图动态加载的示例
Dec 11 #Javascript
Vue响应式原理深入解析及注意事项
Dec 11 #Javascript
js时间戳与日期格式之间转换详解
Dec 11 #Javascript
js时间戳与日期格式之间相互转换
Dec 11 #Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
Dec 11 #Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 #Javascript
You might like
Apache站点配置SSL强制跳转443
2021/03/09 Servers
javascript 弹出层组件(升级版)
2011/05/12 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
探究Python中isalnum()方法的使用
2015/05/18 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
实习自我鉴定范文
2013/10/30 职场文书
行政主管岗位职责
2013/11/18 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
总经理秘书工作职责
2013/12/26 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
Golang 结构体数据集合
2022/04/22 Golang
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python
Spring中的@Transactional的工作原理
2022/06/05 Java/Android
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript