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 ...
随机推荐
- C++构造函数实例——拷贝构造,赋值
#define _CRT_SECURE_NO_WARNINGS //windows系统 #include <iostream> #include <cstdlib> #incl ...
- Word 2013发布博客测试
Hello world ! I am from word2013! 测试修改 这里添加一行文字. 参考 1在 Word 中建立博客的相关帮助 2使用Word2013发布随笔到博客园 PS: 参考2 ...
- easyui-combogrid匹配查询
用到easyui-combogrid,数据比较少的情况,可以一页就显示完毕,然后直接下拉选择.但是对于数据量比较大的情况,一页显示全部显然不合适,好在从easyui-combogrid的数据加载方式可 ...
- cf984c Finite or not?
一个十进制分数 \(p/q\) 在 \(b\) 进制下是有限小数的充要条件是 \(q\) 的所有质因子都是 \(b\) 的质因子. First, if \(p\) and \(q\) are not ...
- 测试环境docker化—容器集群编排实践
本文来自网易云社区 作者:孙婷婷 背景 在前文<测试环境docker化-基于ndp部署模式的docker基础镜像制作>中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭 ...
- Couchbase I
Couchbase第一印象(架构特性) 面向文档 保存的字节流总有一个 DOCUMENT ID(Object_ID) 高并发性,高灵活性,高拓展性,容错性好 面向文档的集群存储系统 每个文档用一个唯一 ...
- IOS开发学习笔记012-核心语法
1.点语法 2.成员变量的作用域 3. @property和@synthesize 4.id类型 5.构造方法 6.自定义构造方法 7.模板修改 8.Category - 分类 9.类扩展 一.点语法 ...
- Windows核心编程小结3
内存映射和堆栈 内存映射文件 内存映射文件可以用于3个不同的目的: 系统使用内存映射文件,以便加载和执行.exe和DLL文件.这可以大大节省页文件空间和应用程序启动运行所需的时间. 可以使用内存映射文 ...
- Python+Selenium练习篇之17-断言页面标题
继续来介绍一个Selenium中页面title断言方法. 相关脚本代码如下: # coding=utf-8 import time from selenium import webdriver dri ...
- 集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal ...