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

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

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

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

React合成事件理解

如果DOM上绑定了过多的事件处理函数,整个页面响应以及内存占用可能都会受到影响。React为了避免这类DOM事件滥用,同时屏蔽底层不同浏览器之间的事件系统差异,实现了一个中间层——SyntheticEvent。

  1. 当用户在为onClick添加函数时,React并没有将Click时间绑定在DOM上面。
  2. 而是在document处监听所有支持的事件,当事件发生并冒泡至document处时,React将事件内容封装交给中间层SyntheticEvent(负责所有事件合成)
  3. 所以当事件触发的时候,对使用统一的分发函数dispatchEvent将指定函数执行。

React真正处理合成事件过程,可以具体可以参考相关的源码解析:React源码解读系列 – 事件机制

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

class Test extends Component {
    constructor(props) {
        super(props);
        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() {
        
} }

结果:

Dom click
React click

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

注意点:

  1. 不要将原生事件(addEventListener)和React合成事件一起混合使用,这两个机制是不一样的。

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

如果觉得这个理解合适的话,大家可以点个红心,谢谢。

你可能感兴趣的:(React 合成事件和原生事件的区别)