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制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
Feb 05 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
JS实现select选中option触发事件操作示例
Jul 13 Javascript
vue element动态渲染、移除表单并添加验证的实现
Jan 16 Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 Javascript
使用watch在微信小程序中实现全局状态共享
Jun 03 Javascript
JS co 函数库的含义和用法实例总结
Apr 08 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 中使用随机数的三个步骤
2006/10/09 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
如何使用php实现评委评分器
2015/07/31 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
简单的js分页脚本
2009/05/21 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现二叉堆
2016/02/03 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python实现网页自动签到功能
2019/01/21 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
销售口号大全
2014/06/11 职场文书
电影建党伟业观后感
2015/06/01 职场文书
浅谈Redis缓冲区机制
2022/06/05 Redis