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复制插件Zero使用介绍
Mar 19 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
微信小程序 progress组件详解及实例代码
Oct 25 Javascript
js+css3实现旋转效果
Jan 20 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
JS实现马赛克图片效果完整示例
Apr 13 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
js实现消灭星星(web简易版)
Mar 24 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
Vuex 入门教程
2018/01/10 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
详解Python中的join()函数的用法
2015/04/07 Python
python Django模板的使用方法
2016/01/14 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
安装PyInstaller失败问题解决
2019/12/14 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
python如何写个俄罗斯方块
2020/11/06 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
市场部专员岗位职责
2013/11/30 职场文书
药店促销活动总结
2014/07/10 职场文书
迎七一演讲稿
2014/09/12 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
基层工作经验证明样本
2014/11/16 职场文书
学习与创新自我评价
2015/03/09 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书