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 相关文章推荐
关于B/S判断浏览器断开的问题讨论
Oct 29 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 Javascript
Bootstrap 粘页脚效果
Mar 28 Javascript
Angularjs 动态改变title标题(兼容ios)
Dec 29 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
May 07 Javascript
javascript实现图片轮播代码
Jul 09 Javascript
vue实现几秒后跳转新页面代码
Sep 09 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中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
详解Django中Request对象的相关用法
2015/07/17 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
电子专业毕业生自我鉴定
2014/01/22 职场文书
高中英语教学反思
2014/02/04 职场文书
小浪底导游词
2015/02/12 职场文书
2015年度企业工作总结
2015/05/21 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
小学班主任研修日志
2015/11/13 职场文书
教师素质教育心得体会
2016/01/19 职场文书
高三化学教学反思
2016/02/22 职场文书
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers