当前位置: 首页 > news >正文

React(v18)事件原理

1. 背景

在旧版 React 中,事件的处理方式不完全符合标准的事件流顺序。事件的处理顺序是:

  1. 事件监听(比如通过 addEventListener 注册的事件)
  2. 捕获阶段的事件处理(即从父元素到子元素的处理)
  3. 冒泡阶段的事件处理(即从子元素到父元素的处理)

而新版 React(v18)修复了这个问题,将事件处理的顺序调整为:

  1. 捕获阶段的事件处理
  2. 事件监听(即 onClick 等处理函数)
  3. 冒泡阶段的事件处理

2. 事件绑定

新版 React 的事件绑定方式有所变化:

  • 在初始化时(即创建根元素时),React 会一次性在所有需要的地方注册事件监听器。
  • 对于每种事件,如果事件是不冒泡的,那么会执行一次,否则React 会在两个阶段进行绑定:捕获阶段和冒泡阶段。

3. 事件触发

当事件发生时,React 处理事件的步骤是:

  1. 事件分发: React 通过内部的 dispatchEvent 函数开始处理事件。
  2. 事件队列: React 会创建一个事件队列,将需要处理的事件按顺序添加进去。
  3. 执行事件: React 遍历事件队列,按照捕获阶段和冒泡阶段的顺序执行事件处理函数。捕获阶段的处理函数从后往前执行,冒泡阶段的处理函数从前往后执行。

如果某个事件处理函数中调用了 stopPropagation(即阻止事件继续传播),React 会停止后续的事件处理。

总结

新版 React 改进了事件处理的顺序,使其更符合浏览器的标准事件流。这意味着事件处理会更准确地按照捕获和冒泡阶段来执行,并且在初始化阶段会更高效地绑定事件。这样做的好处是可以更一致地模拟浏览器的事件行为,确保事件处理的顺序和效果更加可靠。


http://www.mrgr.cn/news/23365.html

相关文章:

  • 具体的散列表实现示例
  • SpringBoot2:请求处理原理分析-接口参数解析原理(argumentResolvers)
  • MIT License:全面解析与商用指南
  • 医疗设备运营管理,帮助医院实现智能管理评级
  • 兼顾身份保护和文本对齐!中山大学等提出CoRe:任意提示的文本到图像个性化生成!
  • openpose1.7.0编译 cuda12.2 cudnn 8.9.7.29 python3.7
  • 鼠标点击来动态确定 HSV 范围
  • window关闭端口程序
  • AbyssFish单连通周期边界多孔结构2D软件 V2.0版本更新
  • [晕事]今天做了件晕事43 python-byte串长度与转义字符
  • 戏曲文化苑管理系统小程序的设计
  • 问:Java中HashMap和Hashtable区别,知多少?
  • linux-用户与权限管理-组管理
  • 分享一款520表白节JS代码
  • JavaScript 比较 和 逻辑运算符
  • 我的搬砖工具由 VS Code 变成 Cursor 了
  • 建模实战|第八期:Benders Decomposition求解设施选址问题(FLP):理论及python代码实战
  • php代码实例强制下载文件代码例子
  • 算法类学习笔记 ———— 障碍物检测
  • 一个例子彻底搞懂对线程模型的理解 !