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 相关文章推荐
Exitjs获取DataView中图片文件名
Nov 26 Javascript
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
Mar 12 Javascript
js处理json以及字符串的比较等常用操作
Sep 08 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
Oct 17 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
JavaScript 判断iPhone X Series机型的方法
Jan 28 Javascript
Vue最新防抖方案(必看篇)
Oct 30 Javascript
javascript实现移动端上传图片功能
Aug 18 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输出xml格式字符串(用的这个)
2012/07/12 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
python的exec、eval使用分析
2017/12/11 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
捷克时尚网上商店:OTTO
2018/03/15 全球购物
百度JavaScript笔试题
2015/01/15 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
应届毕业生求职信
2013/11/30 职场文书
酒店个人求职信范文
2014/01/25 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
诉讼和解协议书
2016/03/23 职场文书
高一作文之乐趣
2019/11/21 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript