react 侧栏二级菜单组件
侧边栏菜单组件
component 下新建menu文件,menu下建index.jsx和subitem.jsx
index.jsx
import React, { Component } from 'react';
import {NavLink} from 'react-router-dom'
import SubItem from './subitem'
export default class Menu extends React.Component {
constructor(props,context){
super(props,context)
this.state = {
menus:[
{name:'首页',icon:'icon-shouye',show:true,link:'/'},
{name:'公告管理',icon:'icon-gonggao',show:true,link:'/noticelist'},
{name:'人事管理',icon:'icon-yonghu2',show:true,link:'',
submenu:[
{name:'员工档案',link:'/hrmanage/employeefiles',show:true},
{name:'请假申请',link:'/hrmanage/leave',show:true},
]},
{name:'组织架构',icon:'icon-zuzhi1',show:true,link:'/organization'},
{name:'系统管理',icon:'icon-xitong2',show:true,link:'',
submenu:[
{name:'权限设置',link:'/systemset/authorize',show:true},
]
},
]
}
}
render() {
let self = this;
return (
<div className="Menu">
<ul>
{
self.state.menus.map(function(item,index){
return <li key={index}
onClick={self.linktosonpage.bind(self,item,index)}>
{/*如果有二级菜单就显示右边的icon*/}
<i className={`iconfont ${item.icon}`}></i>{item.name}<i className={`youjiantou ${item.submenu?'iconfont icon-youjiantou':''} ${item.show?'rotate':''}`}></i>
{item.submenu
?<SubItem isshow={item.show} items={item.submenu} />:''
}
</li>
})
}
</ul>
</div>
)
}
linktosonpage(item,index){
if(item.link){ // item.link是子菜单的路由地址
location.replace(`#${item.link}`);
// this.props.history.push(item.link) // 用这个报错Cannot read property 'push' of undefined
}else{
let that = this;
let data = that.state.menus;
data[index].show = !data[index].show
that.setState({
menus:data
})
}
}
}
subitem.jsx
import React, { Component } from 'react';
import { Link } from 'react-router-dom'
export default class SubItem extends React.Component {
render(){
let self = this;
return(
<div className="SubItem" className={this.props.isshow?'':'hide'}>
{
this.props.items.map(function(i,subindex){
return <div className="item" key={subindex} onClick={self.stoppropgation.bind(self)}>
<Link to={i.link}>{i.name}</Link>
</div>
})
}
</div>
)
}
stoppropgation(e){
e.stopPropagation();
}
}
react 侧栏二级菜单组件的更多相关文章
- dedecms织梦导航栏二级菜单的实现方法
dede导航下拉菜单,一级栏目增加二级下拉菜单 使用dedecms5.6——5.7 将这段代码贴到templets\default\head.htm文件里<!-- //二级子类下拉菜单,考虑 ...
- element ui aside — 侧栏导航菜单移入移出折叠效果
效果如图,移入移出控制折叠,点击按钮后移入移出不可控制折叠. 功能是很简单的功能,不过昨天这块还是弄了小一个小时,所以记录下来. 发现的问题: 模版上el-aside写上@mouseenter无效 解 ...
- 多种css3时尚侧栏菜单展开显示效果Off-Canvas Menu Effects
今天我们想分享多种css3时尚侧栏菜单展开显示效果.侧边栏应用广泛,我们之前已经产生了一些效果灵感.风格演变,今天我们要展示一套新的灵感的现代效果.不同的布局和菜单的同步转换和页面可以让一切看起来更有 ...
- ionic 侧栏菜单用法
第一步: 引入js和css文件我这里是直接引入的cdn,ionic是基于angular的,bundle.min.js把常用angular的js已经压缩到一起,可以直接引入.bundle.min.js, ...
- Ionic Js十七:侧栏菜单
一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示:   用法 要使用侧栏菜单,添加一个父元素,一个中间内容 ,和一个或更 ...
- HTML+CSS实现导航栏二级下拉菜单完整代码
工具是vs code 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- ionic js 侧栏菜单 把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换
ionic 侧栏菜单 一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示: 用法 要使用侧栏菜单,添加一个父元素<ion ...
- django自定义rbac权限组件(二级菜单)
一.目录结构 二.表结构设计 model.py from django.db import models # Create your models here. class Menu(models.Mo ...
- 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示
手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...
随机推荐
- 【转】OPenGL MFC绘图
一.简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC&q ...
- Runtime是什么?
在看 RPC 的概念模型与实现解析 的时候,看到图片上有Runtime,又想到见过很多Runtime之类的东西,所以就想弄明白这到底是个什么东西. (因为是程序名,所以根本没想到代码的“编译-运行”~ ...
- JavaScript 学习笔记(二)
学习内容: 一.变量的定义 二.JS的基本数据类型 三.JS的基本语法 1.变量的定义: 任何语言中最基本的东西就属于变量了,那么如何定义变量以及运用,其实是一件很简单的事情.. JS中提供了如何 ...
- 格局中@null的代码实现方式
布局中通常会用到@null.如RadioButton常用的技巧通过RadioGroup实现Tab,需要设置android:button="@null".如果要在代码中动态创建控件, ...
- linux下使用tar命令 (转至http://www.cnblogs.com/li-hao/archive/2011/10/03/2198480.html)
解压语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项: c 创建新的档案文件.如果用户想备份一个目录或 ...
- MultiplyVector方法
该方法的功能是用来对方向向量v进行矩阵变换,当矩阵与v进行变换时,只是对v的方向进行转换.那么系统就会对参与变换的Matrix4x4矩阵M进行特殊处理. 例如:经过系统处理后就变为 其中n002 + ...
- js unicode处理
//岗位详细界面 var str="1.\u000D\u21B52.\u000D\u21B53"; var pad = function() { var tbl = []; ret ...
- 【Java面试题】35 List, Set, Map是否继承自Collection接口?
Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法. Set 和List 都继承了Conllection:Set具有与Collection完全一样的接 ...
- LINUX 环境变量总结
1.概述 Linux是一个多用户的操作系统.多用户意味着每个用户登录系统后,都有自己专用的运行环境.而这个环境是由一组变量所定义,这组变量被称为环境变量.用户可以对自己的环境变量进行修改以达到对环境的 ...
- C# 温故而知新:Stream篇(二)
TextReader 和StreamReader 目录: 为什么要介绍 TextReader? TextReader的常用属性和方法 TextReader 示例 从StreamReader想到多态 简 ...