简述下 React 的事件代理机制?

简介: 简述下 React 的事件代理机制?

React 并不会把所有的处理函数直接绑定在真实的节点上。而是把所有的事件绑定到结构的最外层,使用一个统一的事件监听器,这个事件监听器上维持了一个映射来保存所有组件内部的事件监听和处理函数。


当组件挂载或卸载时,只是在这个统一的事件监听器上插入或删除一些对象。


当事件发生时,首先被这个统一的事件监听器处理,然后在映射里找到真正的事件处理函数并调用。


这样做的优点是解决了兼容性问题,并且简化了事件处理和回收机制(不需要手动的解绑事件,React 已经在内部处理了)。但是有些事件 React 并没有实现,比如 window 的 resize 事件。

2023.2.19更新版本:

在React@17.0.3版本中:


所有事件都是委托在id = root的DOM元素中(网上很多说是在document中,17版本不是了);

在应用中所有节点的事件监听其实都是在id = root的DOM元素中触发;

React自身实现了一套事件冒泡捕获机制;

React实现了合成事件SyntheticEvent;

React在17版本不再使用事件池了(网上很多说使用了对象池来管理合成事件对象的创建销毁,那是16版本及之前);

事件一旦在id = root的DOM元素中委托,其实是一直在触发的,只是没有绑定对应的回调函数;


盗用一张官方图,按官方解释,之所以会将事件委托从document中移到id = root的DOM元素,是为了可以更加安全地进行新旧版本 React 树的嵌套

相关文章
|
3月前
|
Web App开发 前端开发 JavaScript
React 之 requestAnimationFrame 执行机制探索
React 之 requestAnimationFrame 执行机制探索
197 0
|
1月前
|
前端开发 JavaScript 算法
react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程
35 0
|
1月前
|
前端开发
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)
28 0
|
1月前
|
前端开发 JavaScript
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
68 0
|
2月前
|
人工智能 监控 前端开发
基于ReAct机制的AI Agent
当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己的LLM推出了自己的AI Agent,比如字节的Coze,百度的千帆等,还有开源的Dify。你是否想知道其中的原理?是否想过自己如何实现一套AI Agent?当然,借助LangChain就可以。
|
3月前
|
前端开发 调度 开发者
React的事件处理机制
【5月更文挑战第29天】React的事件处理机制
34 2
|
3月前
|
JavaScript 前端开发 编译器
Vue和React的运行机制
Vue和React的运行机制
21 0
|
3月前
|
JavaScript 前端开发 开发者
vue和react的运行机制
vue和react的运行机制
28 2
|
3月前
|
前端开发 JavaScript Java
react事件机制
react事件机制
59 0
|
3月前
|
前端开发 JavaScript 开发者
说说react的事件机制?
React的事件机制是一种用于处理用户界面事件的方式,它建立在原生DOM事件的基础上,提供了一种更高级、更一致的方式来处理事件。
28 0