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 相关文章推荐
JS在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
原生js实现给指定元素的后面追加内容
Apr 10 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
AngularJS constant和value区别详解
Feb 28 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
Feb 09 Javascript
前端插件之Bootstrap Dual Listbox使用教程
Jul 23 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
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
Python文件夹与文件的操作实现代码
2014/07/13 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python数据封装json格式数据
2018/03/04 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
幼儿园教学管理制度
2014/02/04 职场文书
教师开学感言
2014/02/14 职场文书
少儿节目主持串词
2014/04/02 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
南极大冒险观后感
2015/06/05 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
Mysql排序的特性详情
2021/11/01 MySQL