React 合成事件 SyntheticEvent

1. 什么是合成事件(SyntheticEvent)?

  • React自己实现了一套事件,在原生事件基础上做了很大改进,减少了内存消耗,解决了IE等浏览器的兼容问题
  • React把事件委托到 document身上(react 17以前),在React17以后再次改进了合成事件,委托对象变成了容器对象
  • 当真实dom元素触发事件,先处理原生事件,然后会冒泡到document或容器对象上,再处理react事件

2. 事件捕获,事件冒泡,事件委托

DOM2级事件规定的事件流包含3个阶段,事件捕获阶段、处于目标阶段、事件冒泡阶段

首先发生的事件捕获为截获事件提供机会,然后是实际的目标接收事件,最后一个阶段是事件冒泡阶段,可以在这个阶段对事件做出响应

  • 事件捕获: 事件捕获会从外向内进行捕获(addEventListener 第三个参数设置为 true可以让事件在 捕获阶段触发)
  • 事件冒泡: 事件冒泡会从内向外冒泡
  • 事件委托: 利用事件冒泡,将事件挂载在外层父级上,当触发子级时会向上冒泡触发父级的方法,再通过 e.target 拿到子级对象

3. React16与17版本合成事件的区别

  • react16时事件委托的对象是 document,react17时事件委托的对象是容器组件
  • react16时原生事件与react事件执行时,冒泡阶段与捕获阶段没有区分开(捕获-> 冒泡 -> 捕获);react17时优化了合成事件的执行,当与原生事件一起调用时,捕
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值