需求:点击导航list按钮出现侧弹框,点击空白处弹框消失

问题:绑定空白处的点击事件到document上,但是非空白处的点击也会触发这个点击事件,在react中如何阻止事件冒泡?

解决方法:e.stopPropagation()并不奏效,react有专属的阻止事件冒泡方法,e.nativeEvent.stopImmediatePropagation()

示例:

/**
* Created by sunzhuoyi on 17/3/6.
*/
import React from 'react';
import {connect} from 'react-redux';
import {autobind} from 'core-decorators';
import {pushState} from 'redux-router';
import Store from '@comynli/store';
import {Menu, Icon, Row, Col, Dropdown, Button, Affix} from 'antd'; @connect(state => ({}),{pushState}) export default class Common extends React.Component {
constructor(props){
super(props);
this.state = {
current:'index',
barDisplay:true
}
} componentDidMount(){
document.onclick=this.handleBarDisplayShow;
} @autobind
handleClick(e) {
this.setState({
current: e.key,
});
} @autobind
handleInLineClick(e) {
this.setState({
current: e.key,
});
} @autobind
handleBarDisplay(e){
e.nativeEvent.stopImmediatePropagation();
this.setState({barDisplay:false})
} @autobind
handleBarDisplayShow(){
e.nativeEvent.stopImmediatePropagation();
this.setState({barDisplay:true})
} render() {
const SubMenu = Menu.SubMenu;
const MenuItemGroup = Menu.ItemGroup;
return(
<div style={{width:'100%'}}>
<Affix>
<Menu onClick={this.handleClick}
mode="horizontal"
style={{lineHeight:'60px',paddingLeft:'20px'}}
>
{
this.state.barDisplay === true ? <Menu.Item key="bars" >
<Icon type="bars" onClick={e => this.handleBarDisplay(e)}/>
</Menu.Item> : <span></span>
}
<Menu.Item key="Poseidon">
<a href="/"><b>Poseidon</b></a>
</Menu.Item>
</Menu>
</Affix>
{
this.state.barDisplay === false ?
<Menu onClick={this.handleInLineClick}
style={{width: 240, paddingLeft: '20px', height: '1500px'}}
mode="inline"
>
<Menu.Item key="Project">
<a href="/">Project</a>
</Menu.Item>
<Menu.Item key="ProjectTwo">
<a href="/">Project</a>
</Menu> : <span></span>
} </div>
)
}
}

React阻止事件冒泡的正确打开方式的更多相关文章

  1. react 阻止事件冒泡

    前言 在学习react阻止事件冒泡,需要先了解 合成事件 和 原生事件 合成事件:在jsx中直接绑定的事件,就是合成事件: 原生事件: 通过js原生代码绑定的事件,就是原生事件: react事件:re ...

  2. jquery阻止事件冒泡的3种方式

    第一种:return false, 缺点:直接返回了函数,函数后面的语句没法执行了: $('.btn').on('click',function(event){ do something ... re ...

  3. JQuery中阻止事件冒泡的两种方式及其区别

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...

  4. 深入React事件系统(React点击空白部分隐藏弹出层;React阻止事件冒泡失效)

    只关注括号内问题的同学,可直接跳转到蓝字部分.(标题起的有点大,其实只讨论一个问题) 两个在React组件上绑定的事件,产生冲突后,使用e.stopPropagation(),阻止冒泡,即可防止事件冲 ...

  5. React 中阻止事件冒泡的问题

    在正式开始前,先来看看 JS 中事件的触发与事件处理器的执行. JS 中事件的监听与处理 事件捕获与冒泡 DOM 事件会先后经历 捕获 与 冒泡 两个阶段.捕获即事件沿着 DOM 树由上往下传递,到达 ...

  6. 阻止事件冒泡两种方式:event.stopPropagation();和return false;

    jQuery提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function (event) { ...

  7. JQuery中阻止事件冒泡方式及其区别

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation();         $("#div1").mousedown(function( ...

  8. JQuery 提供了两种方式来阻止事件冒泡。

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...

  9. JS如果阻止事件冒泡和浏览器默认事件

    原地址:http://missra.com/article/web-57.html 嵌套的标签元素,如果父元素和子元素都绑定了一些事件,那么在点击最内层子元素时可能会触发父级元素的事件,下面介绍一下J ...

随机推荐

  1. Spring基础(1) : 自动装配

    1.自动装配 1.1 byType 1.1.1根据类型自动匹配,若当前没有类型可以注入或者存在多个类型可以注入,则失败.必须要有对于的setter方法 public class Person{ pub ...

  2. C++中的 CONST 含义(从#define 到 CONST 的转变)

    const 与define 两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些.#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似 ...

  3. android 日期控件 DatePicker

    DatePicker的缺陷 提供的API太少,没办法个性化定制.比如,不能指定某部分的颜色,不能控制显示的部分等. xml中提供的属性太少,同样影响定制化. 兼容性问题太多,在4.x,5.x和6.0+ ...

  4. python与中文的那点事

    目录 python与中文的那点事 1. utf-8/gbk/unicode/ASCII 2.各种编码之间的转换 3. 统计字符串中数字,字母,汉字的个数 python与中文的那点事 在学习python ...

  5. java项目运用server运行(eclipse、myeclipse通用)

    右键点击”new“选择“Other”,打开选项 勾选”Show All Wizards“ 然后在搜索处输入server,选择server,点击next 刚进来时此处都是空的,点击Configure r ...

  6. 前m大的数(hdu1280)

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. How to write a professional email?

    Advantages and Disadvantages of Email communication compared with Face-To-Face communication:   Emai ...

  8. 设计模式(19)--Observer(观察者模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图( ...

  9. 【VS2015】Win7 X64上面安装VS2015

    环境: 1.Win7 x64 SP1旗舰版 2.VS2015专业版Update3 3.IE11 4.WDK10 5.SDK10   安装步骤: 1.安装IE11,需要如下补丁:     a.Windo ...

  10. JavaScript修改日期格式

    <script> //封装时间格式 function format(time, format) { var t = new Date(time); var tf = function (i ...