react 使用antd导航组件实现事件传递并局部刷新DOM

我们要实现一个通过点击顶部导航来查询左侧菜单的一个功能
在这个功能中,我们要应用到onClick={this.headNavMenuList.bind(this)}方法来传递点击 不同按钮来传递不同的值
注意:如果 我们要在后续事件中使用传递过来的参数来更新局部DOM,则可以不加.bind(this),否则会报出警告
adtd中的事件与常用的事件略有不同,是在父层窗口上绑定事件,通过相同的key值来实现不同的数据传递
onClick={this.headNavMenuList.bind(this)}
<Menu mode="horizontal" selectedKeys={[]} onClick={this.headNavMenuList.bind(this)}>
参数mode表示排列方式,selectedKeys的值就和<Menu.Item key="">的key值相同时,该<Menu.Item key="">就是选中状态,
onClick事件函数的参数表示事件源,即点击哪个菜单元素,e就表示哪个菜单元素
我们通过.bind(this)来绑定子元素的key值 来达到点击 不同按钮效果
然后通过this.setState()方法来重新对元素赋值并更新DOM
let Page = React.createClass({
mixins: [LoadingMixin,NotificationMixin,RequestMixin],
getInitialState() {
let userInfo = LocalService.getUserInfo() && JSON.parse(LocalService.getUserInfo()) || {};
return {
routes: [],
modules: modules || [],
curSelectedMenuKey: [],
userInfo: userInfo,
openKeys: [],
prolist:prolist,
headNav:[{number:"1",name:"iframe"},{number:"2",name:"itable"},{number:"3",name:"home"}],
}
},
headNavMenuList(e){
let prolistId = e.key;
this.get({
url: "Api/search/module/menu/key/dac509bd90a231239291e12c24a6f1af4bac",
param: {
proid: prolistId,
userid:this.state.userInfo.id
},
noLoading: true
}).then(result=> {
this.setState({modules: result.result || []});
// callback && callback(result.result || []);
})
},
render(){
return (
<div className="app-main">
<div className="app-header">
<div className="header-title" >管理后台</div>
<Menu
theme="dark"
mode="horizontal"
defaultSelectedKeys={['1']}
style={{ lineHeight: '64px' }}
onClick={this.headNavMenuList}
>
{
this.state.headNav && this.state.headNav.map((items,index) =>{
for(let i=0;i<prolist.prolist.length;i++){
if(prolist.prolist[i] == items.number){
return (
<Menu.Item key={prolist.prolist[i]} >{items.name}</Menu.Item>
)
}
}
})
}
</Menu>
</div>
div className="app-wrap">
<div className="nav-sider" >
<Menu
mode="inline"
selectedKeys={this.state.curSelectedMenuKey}
openKeys={this.state.openKeys}
onOpenChange= {this.onOpenChange}
style={{ height: '100%', borderRight: 0 }}
onClick={this.handleMenuItemClick}
className="scroll"
>
{
this.state.modules && this.state.modules.map((subItem,index) => {
if (subItem.hasChildren) {
return (
<SubMenu key={subItem.id} title={subItem.title} >
{
subItem.children && subItem.children.map((item,j) => {
return (
<Menu.Item key={item.id} onClick={this.handleMenuItemClick}>{item.title}</Menu.Item>
)
})
}
</SubMenu>
)
}
else {
return (
<Menu.Item key={subItem.id} >{subItem.title}</Menu.Item>
)
}
})
}
</Menu>
</div>
)
}
react 使用antd导航组件实现事件传递并局部刷新DOM的更多相关文章
- vue+el-menu实现路由刷新和导航栏菜单状态保持(局部刷新页面)
一.菜单项激活状态保持 有时,我们在项目中会有这样一个需求,即实现 一个侧导航栏,点击不同的菜单项,右边内容会跟着变化,而页面手动刷新后想要使菜单激活状态保持,那么这个功能该如何实现呢? 现在给出以下 ...
- 解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐
一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...
- 组件:事件传递$emit
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- vue组件的使用和事件传递
子组件与父组件的事件传递具体实现如下: 子组件: <template> <section class="xftz-data-list"> <div c ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- react组件的数据传递
在react中,为了解决html标签构建应用的不足,将公共的功能单独抽离成一个文件作为一个组件,在使用的地方按需引入,既然是组件彼此调用,就会涉及到父子组件的通信,下面主要来总结简单的组件通信. 1, ...
- angular,vue,react的基本语法—动态属性、事件绑定、ref,angular组件创建方式
基本语法: 动态属性: vue: v-bind:attr="msg" :attr="msg" react: attr={msg} angular [attr]= ...
- 微信小程序之结构目录、视图层、双线程模型、生命周期、事件传递冒泡、组件、request、登录授权及支付
结构目录与配置介绍 视图层与基础语法 双线程模型 生命周期 事件.传递和冒泡 组件.自定义组件.组件事件传递页面 Request.路由跳转.本地存储 登录(后端实现) | 授权(后端实现) 支付(后端 ...
- 微信小程序 - 组件 | 自定义组件 | 组件事件传递页面
组件 小程序允许我们使用自定义组件的方式来构建页面 类似Vue的小组件 自定义组件 类似于页面,一个自定义组件由 json, wxml, wxss, js 4个文件组成 1.创建 1.创建compon ...
随机推荐
- 【Reverse Integer】cpp
题目: Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 click ...
- 【 Sqrt(x) 】cpp
题目: Implement int sqrt(int x). Compute and return the square root of x. 代码: class Solution { public: ...
- maven文件报错(pom.xml或者jar包缺失)解决方法
相信很多朋友在myeclipse上把maven配置好了,但是新建maven项目的时候会报错,下面我来总结以下我遇到的问题. 新建完maven项目后,pom.xml报错 1.报错的原因:很多时候我们在下 ...
- 实战小项目之嵌入式linux图像采集与传输
项目简介 本次编程实战主要是围绕嵌入式linux v4l2采集框架展开,包括以下几个部分: v4l2视频采集 IPU转码 framebuffer显示 自定义UDP简单协议进行传输 上位机软件 ...
- 深入学习之mysql(一)数据库操作
1.显示所有数据库: SHOW DATABASES; 2.创建数据库: CREATE DATABASE 数据库名: 3.选择你所创建的数据库: USE 数据库名; 4.删除数据库: DROP 数据库名 ...
- redis3.0.6版本的info信息解读
127.0.0.1:6379> info# Serverredis_version:3.0.6redis_git_sha1:00000000redis_git_dirty:0redis_buil ...
- HDU 4177 模拟时间问题
Avoiding a disaster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- web自动化测试:watir+minitest(二)
环境搭建: 我已经安装了一台全新的win7虚拟机.下面将开始搭建watir环境. 安装包清单. 安装ruby.执行rubyinstaller-2.2.4-x64.exe 选择语言: 勾选添加到环境变量 ...
- firewalld的防火墙
firewalld的介绍与简单应用 CentOS7的默认防火墙是firewalld,在之前使用iptables时,关闭了firewalld服务,现在反过来关闭iptables服务,打开firewall ...
- springboot添加事务
(转自:http://www.cnblogs.com/xingzc/p/6029483.html) 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合.由于数据 ...