美文网首页react前端
react阻止冒泡事件,绝对干货

react阻止冒泡事件,绝对干货

作者: 泡芙小姐110 | 来源:发表于2017-05-16 18:00 被阅读1942次

最近在研究react、redux等,网上找了很久都没有完整的答案,如果对你有用就关注一下,以后都会有干货分享的,谢谢。

首先,要知道再react中的合成事件和原生事件之间的区别。
1、合成事件

在jsx中直接绑定的事件,如

<a ref="aaa" onClick={(e)=>this.handleClick(e)}>更新</a>

这里的handleClick事件就是合成事件

2、原生事件

通过js原生代码绑定的事件,如

document.body.addEventListener('click',e=>{
// 通过e.target判断阻止冒泡
    if(e.target&&e.target.matches('a')){
return;
    }
console.log('body');
})
或
this.refs.update.addEventListener('click',e=>{
            console.log('update');
        });

3、阻止冒泡事件分三种情况

A、阻止合成事件间的冒泡,用e.stopPropagation();

import React,{ Component } from 'react';
import ReactDOM,{findDOMNode} from 'react-dom';

class Counter extends Component{
constructor(props){
super(props);
this.state = {
count:0,
        }
    }

handleClick(e){
// 阻止合成事件间的冒泡
        e.stopPropagation();

this.setState({count:++this.state.count});
    }

testClick(){
console.log('test')
     }

render(){
return(
<div ref="test" onClick={()=>this.testClick()}>
<p>{this.state.count}</p>
<a ref="update" onClick={(e)=>this.handleClick(e)}>更新</a>
</div>
        )
    }
}

var div1 = document.getElementById('content');

ReactDOM.render(<Counter/>,div1,()=>{});

B、阻止原生事件与最外层document上的事件间的冒泡,用

e.nativeEvent.stopImmediatePropagation();

import React,{ Component } from 'react';
import ReactDOM,{findDOMNode} from 'react-dom';

class Counter extends Component{
constructor(props){
super(props);

this.state = {
count:0,
        }
    }

handleClick(e){
// 阻止原生事件与最外层document上的事件间的冒泡
        e.nativeEvent.stopImmediatePropagation();

this.setState({count:++this.state.count});
    }

render(){
return(
<div ref="test">
<p>{this.state.count}</p>
<a ref="update" onClick={(e)=>this.handleClick(e)}>更新</a>
</div>
        )
    }

componentDidMount() {
document.addEventListener('click', () => {
console.log('document');
        });
    }
}

var div1 = document.getElementById('content');

ReactDOM.render(<Counter/>,div1,()=>{});

C、阻止合成事件与除最外层document上的原生事件上的冒泡,通过判断e.target来避免

import React,{ Component } from 'react';
import ReactDOM,{findDOMNode} from 'react-dom';

class Counter extends Component{
constructor(props){
super(props);

this.state = {
count:0,
        }
    }

handleClick(e){
this.setState({count:++this.state.count});
    }
render(){
return(
<div ref="test">
<p>{this.state.count}</p>
<a ref="update" onClick={(e)=>this.handleClick(e)}>更新</a>
</div>
        )
    }

componentDidMount() {
document.body.addEventListener('click',e=>{
// 通过e.target判断阻止冒泡
            if(e.target&&e.target.matches('a')){
return;
            }
console.log('body');
        })
    }
}

var div1 = document.getElementById('content');

ReactDOM.render(<Counter/>,div1,()=>{});

相关文章

  • react阻止冒泡事件,绝对干货

    最近在研究react、redux等,网上找了很久都没有完整的答案,如果对你有用就关注一下,以后都会有干货分享的,谢...

  • react阻止冒泡事件

    文章引用来自: http://www.jianshu.com/p/e0894bd588f4。 1、合成事件 在js...

  • react 阻止事件冒泡

    需求分析: div中嵌套button:点击“报名”按钮,随之子元素和父元素的事件都被触发。js中称之为冒泡...

  • 微信小程序中bind和catch的区别

    bindtap 冒泡事件,事件绑定不会阻止冒泡事件向上冒泡catchtap 非冒泡事件, 事件绑定阻止冒泡事件...

  • jQuery动画、循环、事件

    jQuery动画 jQuery循环 元素绝对位置 鼠标移入移出 jQuery事件 自定义事件 事件冒泡 弹框-阻止冒泡

  • wepy基础知识

    1、bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。https://deve...

  • stopPropagation和stopImmediatePro

    都可以阻止事件冒泡(子元素向父元素冒泡) stopImmediatePropagation阻止事件冒泡并且阻止相同...

  • js 元素事件行为

    阻止默认事件: 事件委托: 阻止事件冒泡:

  • 合成事件vs原生事件

    场景:由于需求的原因,在React中混用了原生事件,发现e.stopPropagation();阻止事件冒泡无效。...

  • JS调试代码方向

    事件冒泡 - 阻止冒泡

网友评论

    本文标题:react阻止冒泡事件,绝对干货

    本文链接:https://www.haomeiwen.com/subject/ddnlxxtx.html