我们要实现一个通过点击顶部导航来查询左侧菜单的一个功能

在这个功能中,我们要应用到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的更多相关文章

  1. vue+el-menu实现路由刷新和导航栏菜单状态保持(局部刷新页面)

    一.菜单项激活状态保持 有时,我们在项目中会有这样一个需求,即实现 一个侧导航栏,点击不同的菜单项,右边内容会跟着变化,而页面手动刷新后想要使菜单激活状态保持,那么这个功能该如何实现呢? 现在给出以下 ...

  2. 解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐

    一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...

  3. 组件:事件传递$emit

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  4. vue组件的使用和事件传递

    子组件与父组件的事件传递具体实现如下: 子组件: <template> <section class="xftz-data-list"> <div c ...

  5. React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)

    import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...

  6. react组件的数据传递

    在react中,为了解决html标签构建应用的不足,将公共的功能单独抽离成一个文件作为一个组件,在使用的地方按需引入,既然是组件彼此调用,就会涉及到父子组件的通信,下面主要来总结简单的组件通信. 1, ...

  7. angular,vue,react的基本语法—动态属性、事件绑定、ref,angular组件创建方式

    基本语法: 动态属性: vue: v-bind:attr="msg" :attr="msg" react: attr={msg} angular [attr]= ...

  8. 微信小程序之结构目录、视图层、双线程模型、生命周期、事件传递冒泡、组件、request、登录授权及支付

    结构目录与配置介绍 视图层与基础语法 双线程模型 生命周期 事件.传递和冒泡 组件.自定义组件.组件事件传递页面 Request.路由跳转.本地存储 登录(后端实现) | 授权(后端实现) 支付(后端 ...

  9. 微信小程序 - 组件 | 自定义组件 | 组件事件传递页面

    组件 小程序允许我们使用自定义组件的方式来构建页面 类似Vue的小组件 自定义组件 类似于页面,一个自定义组件由 json, wxml, wxss, js 4个文件组成 1.创建 1.创建compon ...

随机推荐

  1. Problem E. TeaTree - HDU - 6430 (树的启发式合并)

    题意 有一棵树,每个节点有一个权值. 任何两个不同的节点都会把他们权值的\(gcd\)告诉他们的\(LCA\)节点.问每个节点被告诉的最大的数. 题解 第一次接触到树的启发式合并. 用一个set维护每 ...

  2. 【Todo】 cygwin下emacs中M-x shell 中出现乱码

  3. 为什么要用枚举实现Singleton--Java

    原文地址:http://www.cnblogs.com/AprilCal/p/5426007.html 理由一:无需再考虑可序列化的情况   <effective java>第77条:对于 ...

  4. python django 路由系统

    URL配置                        基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views ...

  5. 安恒月赛 image up

    http://101.71.29.5:10007/index.php?page=login 仔细观察这个url的话会发现,存在文件包含. 而且并没有login.php而是login,猜测代码是 < ...

  6. 07 JVM 是如何实现反射的

    Java 中的反射 反射是 Java 语言的一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为. 我们可以通过 Class 对象枚举该类中的所有方法,还可以通过 Met ...

  7. Halcon18 windows 下载

    Halcon18 windows 下载地址:http://www.211xun.com/download_page_13.html HALCON 18 是一套机器视觉图像处理库,由一千多个算子以及底层 ...

  8. [oldboy-django][2深入django]mysql查询语句--原生sql

    # 增(一共有三种方式) # 插入单条记录 insert into t1(name,...) values('lzp',..); 注意一点:t1(name,...)必须包含所有非空列(除去自增列) # ...

  9. 史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)

    ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行.网上也有很多关于ffmpeg的资料介绍.但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的 ...

  10. [SCOI2007][bzoj1070] 修车 [费用流]

    题面 传送门 思路 我们考虑某个工人修车的从前到后序列如下: ${W_1,W_2,W_3,...,W_n}$ 那么,对于这n辆车的车主而言,他们等候的总时间为: $\sum_{i=1}^{n}W_i\ ...