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 相关文章推荐
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
javascript对中文按照拼音排序代码
Aug 20 Javascript
AngularJs表单验证实例代码解析
Nov 29 Javascript
JS中mouseup事件丢失的原因与解决办法
Jun 14 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
详解express使用vue-router的history踩坑
Jun 05 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
JavaScript cookie原理及使用实例
May 08 Javascript
浅谈JavaScript 声明提升
Sep 14 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python中偏函数partial用法实例分析
2015/07/08 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python把转列表为集合的方法
2019/06/28 Python
Django框架视图函数设计示例
2019/07/29 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
python speech模块的使用方法
2020/09/09 Python
python设置中文界面实例方法
2020/10/27 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
C语言编程练习
2012/04/02 面试题
strlen的几种不同实现方法
2013/05/31 面试题
Internet主要有哪些网络群组成
2015/12/24 面试题
2014小学数学教师个人工作总结
2014/12/18 职场文书
公司开除员工通知
2015/04/22 职场文书
干部培训工作总结2015
2015/05/25 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers