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 相关文章推荐
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
Javascript执行效率全面总结
Nov 04 Javascript
JS与C#编码解码
Dec 03 Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 Javascript
13个PHP函数超实用
Oct 21 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
May 05 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
详谈commonjs模块与es6模块的区别
Oct 18 Javascript
vue短信验证性能优化如何写入localstorage中
Apr 25 Javascript
如何在基于vue-cli的项目自定义打包环境
Nov 10 Javascript
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php 不同编码下的字符串长度区分
2009/09/26 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python实现事件驱动
2018/11/21 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python reques接口测试框架实现代码
2020/07/28 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
计划生育汇报材料
2014/12/26 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
发票退票证明
2015/06/24 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
使用Python拟合函数曲线
2022/04/14 Python