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版本并存,例如微前端
相关推荐
PineappleCoder2 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪2 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯2 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
源码获取_wx:Fegn08953 小时前
基于springboot + vue健身房管理系统
java·开发语言·前端·vue.js·spring boot·后端·spring
闲谈共视3 小时前
基于去中心化社交与AI智能服务的Web钱包商业开发的可行性
前端·人工智能·去中心化·区块链
CreasyChan3 小时前
C# 反射详解
开发语言·前端·windows·unity·c#·游戏开发
JIngJaneIL3 小时前
基于Java+ vue智慧医药系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
hashiqimiya5 小时前
两个步骤,打包war,tomcat使用war包
java·服务器·前端
零度@5 小时前
Java中Map的多种用法
java·前端·python
yuanyxh6 小时前
静默打印程序实现
前端·react.js·electron