React的事件与原生事件的执行顺序?

简介: React的事件与原生事件的执行顺序?

react自身实现了一套自己的事件机制,包括事件注册、事件的合成、事件冒泡、事件派发等,虽然和原生的是两码事,但也是基于浏览器的事件机制下完成的。

react 的所有事件并没有绑定到具体的dom节点上而是绑定在了document 上,然后由统一的事件处理程序来处理,同时也是基于浏览器的事件机制(冒泡),所有节点的事件都会在 document 上触发。

React事件与原生事件的执行顺序又是如何?

代码示例

import React from 'react';
class App extends React。Component {

constructor(props) {
    super(props);
    this.parentRef = React.createRef();
    this.childRef  = React.createRef();
}

componentDidMount() {
    console.log('react componentDidMount');
    this.parentRef.current?.addEventListener('click', () => {
        console.log('父元素:原生事件 父元素 DOM 事件监听');
    });
    this.childRef.current?.addEventListener('click', () => {
        console.log('子元素:原生事件 子元素 DOM 事件监听');
    });
    document.addEnvetListener('click', e => {
        console.log('document:原生document DOM 事件监听');
    });
}

parentClickFun = () => {
    console.log('React:父元素事件监听'); 
};

childClickFun = () => {
   console.log('React:子元素事件监听'); 
}
render() {
    return (
        <div ref={this.parentRef} onClick={this.parentClickFun}>
            <div ref={this.childRef} onClick={this.childClickFun}>事件执行</div>
        </div>
    );
}

}

输出:

子元素:原生事件 子元素 DOM 事件监听

父元素:原生事件 父元素 DOM 事件监听

React:子元素事件监听

React:父元素事件监听

document:原生document DOM 事件监听

事件执行顺序:

1、先执行 子元素的DOM事件

2、执行 父元素的DOM事件

3、执行 React 子元素的事件

4、执行 React 父元素的事件

5、 最后执行 document上的DOM事件的监听

由上总结:

1、React 中所有事件都挂载在document对象上

2、先触发真是DOM事件,再触发React事件

3、最后执行document 上挂载的事件

如何阻止冒泡行为?

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

2、阻止合成事件与最外层document 上的事件的冒泡:e.nativeEvent.stop

3、阻止合成事件与原生事件的冒泡:

document.body.addEventListener('click', e => {
if (e.target && e.target.matches('div.code')) {
return;
}
this.setState({active: false});
});
总结

React 最终会绑定在document这个DOM上

React有一套自己的合成事件机制

相关文章
|
18天前
|
前端开发 JavaScript Java
React 中的合成事件
【8月更文挑战第30天】
22 6
|
29天前
|
存储 前端开发 JavaScript
React中的事件处理(八)
【8月更文挑战第15天】React中的事件处理
29 1
|
18天前
|
存储 JavaScript 前端开发
探索React状态管理:Redux的严格与功能、MobX的简洁与直观、Context API的原生与易用——详细对比及应用案例分析
【8月更文挑战第31天】在React开发中,状态管理对于构建大型应用至关重要。本文将探讨三种主流状态管理方案:Redux、MobX和Context API。Redux采用单一存储模型,提供预测性状态更新;MobX利用装饰器语法,使状态修改更直观;Context API则允许跨组件状态共享,无需第三方库。每种方案各具特色,适用于不同场景,选择合适的工具能让React应用更加高效有序。
29 0
|
18天前
|
前端开发 JavaScript 开发者
如何在 React 中处理事件?
【8月更文挑战第31天】
25 0
|
18天前
|
前端开发 JavaScript
React 中的事件是什么?
【8月更文挑战第30天】
36 0
|
2月前
|
前端开发 JavaScript 算法
react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
46 0
|
4月前
|
前端开发 调度 开发者
React的事件处理机制
【5月更文挑战第29天】React的事件处理机制
42 2
|
4月前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理按钮的点击行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理按钮的点击行为?
43 1
|
4月前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
160 1
|
1月前
|
前端开发 JavaScript UED
React 基础与实践 | 青训营笔记
React 基础与实践 | 青训营笔记
39 0

热门文章

最新文章