React合成事件

一、合成事件

    1. event 是 SyntheticEvent ,模拟出来 DOM 事件所有能力
    1. event.nativeEvent 是原生事件对象
    1. 所有的事件,都被挂载到 document 上(React ≤ 16),React17之后是挂载到root组件
    1. 和 DOM 事件不一样,和 Vue 事件也不一样

      div触发事件,DOM事件冒泡到document上,
      document会生成一个统一的合成事件对象
      再派发事件

二、为什么要合成事件机制?

1、更好的兼容性和跨平台

自己实现一套事件机制,尽可能摆脱了DOM事件的逻辑, 更好的兼容性和跨平台

2、挂载到document, 减少内存消耗,避免频繁解绑

事件挂载越多,内存消耗越高,(不用给每个子元素挂载事件,使用冒泡)

看似事件挂载到组件上,其实是在document,组件销毁的时候,也不用解绑事件

3、方便事件的统一管理(如事务机制)

三、React事件绑定

  • React16 绑定到document
  • React 17 18绑定到root组件
  • 有利于多个React版本并存,例如微前端
相关推荐
韩曙亮2 分钟前
【Web APIs】移动端轮播图案例 ( 轮播图自动播放 | 设置无缝衔接滑动 | 手指滑动轮播图 | 完整代码示例 )
前端·javascript·css·html·轮播图·移动端·web apis
犬大犬小7 分钟前
Web 渗透:如何绕过403 Forbidden? Part I
前端·安全性测试·web 安全
水龙吟啸9 分钟前
项目设计与开发:智慧校园食堂系统
python·机器学习·前端框架·c#·团队开发·visual studio·数据库系统
AI前端老薛20 分钟前
面试:了解闭包吗?
前端
xu_duo_i34 分钟前
vue3+element-plus图片上传,前端压缩(纯函数,无插件)
前端·javascript·vue.js
林恒smileZAZ37 分钟前
在 Web 前端实现流式 TTS 播放
前端
睡不着的可乐38 分钟前
前端优化:requestAnimationFrame vs setInterval 性能对比与实战
前端
C_心欲无痕42 分钟前
nodejs - npm serve
前端·npm·node.js
释怀不想释怀1 小时前
web前端crud (修改,删除)
前端
MoonPointer-Byte1 小时前
MoonReader:基于 SpringBoot 3.4 & React 的沉浸式协作阅读平台
spring boot·后端·react.js