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之卸载鼠标事件的代码
May 14 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
AngualrJS中的Directive制作一个菜单
Jan 26 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
Angular4 中内置指令的基本用法
Jul 31 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
Feb 02 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 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 session 预定义数组
2009/03/16 PHP
php浏览历史记录的方法
2015/03/10 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
pygame学习笔记(5):游戏精灵
2015/04/15 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python初学者常见错误详解
2019/07/02 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
动态密码技术
2012/10/18 面试题
中秋节礼品促销方案
2014/02/02 职场文书
交通事故调解协议书
2014/04/16 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS