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 相关文章推荐
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 Javascript
jquery滚动条插件jScrollPane的使用介绍
Nov 08 Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
javascript结合Canvas 实现简易的圆形时钟
Mar 11 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
Sep 18 Javascript
Vue使用vue-cli创建项目
Sep 01 Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
May 23 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
layui操作列按钮个数和文字颜色的判断实例
Sep 11 Javascript
原生小程序封装跑马灯效果
Oct 21 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之apc
2013/05/15 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
JS 控件事件小结
2012/10/31 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
python自动zip压缩目录的方法
2015/06/28 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
python中logging包的使用总结
2018/02/28 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
python中@contextmanager实例用法
2021/02/07 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
事业单位接收函
2014/01/10 职场文书
请假条范文大全
2014/04/10 职场文书
宣传标语大全
2014/07/01 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
信用卡工资证明范本
2015/06/19 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js