美文网首页大前端React学习前端修仙之路
React 合成事件和原生事件的区别

React 合成事件和原生事件的区别

作者: shengqz | 来源:发表于2018-05-13 22:48 被阅读268次

博主最近在学习React事件绑定时,发现React绑定时间有其自身的一套机制,那就是合成事件。
先看源码:

<div className="testDom" onClick={this.testDomClick()}><div>

React合成事件和原生事件区别

React合成事件一套机制:React并不是将click事件直接绑定在dom上面,而是采用事件冒泡的形式冒泡到document上面,然后React将事件封装给正式的函数处理运行和处理。

以下用代码来展示两者的区别:

class Test extends Component {
    constructor() {
        super(arguments);
        this.onReactClick.bind(this);
    }
    componentDidMount() {
        const parentDom = ReactDOM.findDOMNode(this);
        const childrenDom = parentDom.queneSelector(".button");
        childrenDom .addEventListen('click', this.onDomClick, false);
    }
    onDomClick() {  // 事件委托
        console.log('Javascript Dom click');
    }
    onReactClick() {  // react合成事件
        console.log('React click');
    }
    render() {
        <div>
            <button className="button" onClick={this.onReactClick()}>点击</button>
        </div>
    }
}

结果:

Dom click
React click

可以看待原生绑定快于合成事件绑定。

event.stopPropagation
对于event.stopPropagation(),在合成事件,会禁止冒泡阶段,也就是说,无法让其冒泡到document中,但是对React其他的合成事件是不影响的。
例子:

class Test extends Component {
    constructor() {
        super(arguments);
        this.onReactClick.bind(this);
    }
    componentDidMount() {
        const parentDom = ReactDOM.findDOMNode(this);
        const childrenDom = parentDom.queneSelector(".button");
        childrenDom .addEventListen('click', this.onDomClick, false);
    }
    onParentDomDomClick() { // 事件委托
        console.log('ParentDom click');
    }
    onChildrenDomClick(event) { // 事件委托
        event.stopPropagation();
        console.log('ChildrenDom click');
    }
    onReactClick() {  // react合成事件
        console.log('React click');
    }
    render() {
        <div>
            <button className="button" onClick={this.onReactClick()}>点击</button>
        </div>
    }
}

结果:

ParentDom click
React click

总结:React合成事件和原生事件区别还是较大的,主要在于合成事件在于事件冒泡,而原生事件在于实际绑定。

参考:React合成事件和DOM原生事件混用须知

相关文章

  • react事件机制

    (1)react合成事件 react合成事件执行过程: 合成事件与原生事件的区别 1. 写法不同,合适事件是驼峰写...

  • react-原生事件和合成事件的区别

    react-原生事件和合成事件的区别及源码分析 概念 关于 react 合成事件 目的: 封装事件,实现跨平台,把...

  • React -------合成事件和DOM原生事件混用须知

    React合成事件和DOM原生事件混用须知

  • React-阻止事件冒泡

    react中分为合成事件、原生事件 合成事件:在jsx中直接绑定的事件,如 原生事件:通过js原生代码绑定的事件,...

  • --

    react事件机制 react基于浏览器原生事件机制,封装了一套自己的事件机制,包括事件注册、事件合成、冒泡和捕获...

  • 【React深入】React事件机制

    关于React事件的疑问 1.为什么要手动绑定this 2.React事件和原生事件有什么区别 3.React事件...

  • React 合成事件和原生事件的区别

    博主最近在学习React事件绑定时,发现React绑定时间有其自身的一套机制,那就是合成事件。先看源码: Reac...

  • react事件

    在react中,存在两种事件,一种是合成事件,一种是原生事件。原生事件很好理解,基于dom的操作是原生事件,那什么...

  • react的setState是同步还是异步

    直接上结论: 在react的合成事件中是异步在原生事件、setTimeout中是同步。 首先,在react中,平常...

  • React冒泡处理(3):总结篇

    前言 在上周处理了safari浏览器的冒泡问题后又遇到了新的问题 合成事件与原生事件 在react中,事件分为合成...

网友评论

    本文标题:React 合成事件和原生事件的区别

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