1. 什么是合成事件
React 16.x及以前的合成事件
- 事件委托到
document; - 部分事件还是会绑定到当前元素;
- 存在React事件和原生事件的映射关第,比如onMouseLeave会映射成原生的mouseout事件;
- 事件池机制。
React 17后的合成事件
- 事件委托到
root; - React capture阶段的合成事件提前到原生事件
capture阶段执行; - 移除事件池机制;
- 事件有优先级。
2. 为什么使用合成事件?
- 浏览器兼容,统一行为,比如事件对象有统一的属性和方法,比如移除不想要的点击事件,
再比如注册鼠标事件
onMouseLeave和onMouseOut都会映射成原生的mouseout事件。 - 多平台适配,ReactNative也能使用。
- 实现事件委托,避免大量创建事件监听。
- SyntheticEvent合成事件对象,在新版本,会react初始化的时候进行实例化。