React合成事件

135 阅读1分钟

1. 什么是合成事件

React 16.x及以前的合成事件

  1. 事件委托到document;
  2. 部分事件还是会绑定到当前元素;
  3. 存在React事件和原生事件的映射关第,比如onMouseLeave会映射成原生的mouseout事件;
  4. 事件池机制。

React 17后的合成事件

  1. 事件委托到root;
  2. React capture阶段的合成事件提前到原生事件capture阶段执行;
  3. 移除事件池机制;
  4. 事件有优先级。

2. 为什么使用合成事件?

  • 浏览器兼容,统一行为,比如事件对象有统一的属性和方法,比如移除不想要的点击事件, 再比如注册鼠标事件onMouseLeaveonMouseOut都会映射成原生的mouseout事件。
  • 多平台适配,ReactNative也能使用。
  • 实现事件委托,避免大量创建事件监听。
  • SyntheticEvent合成事件对象,在新版本,会react初始化的时候进行实例化。