16.简述下React的事件代理机制

    React并不会把所有的处理函数直接绑定到真实的节点上,而是把所有的事件都绑定到结构的在外层,这个事件监听器上维持了一个映射来保存所有组件内部的事件监听和处理函数

    当组件挂载或卸载的时候,只是在这个统一的事件监听器上插入或删除一些对象

    当事件发生时,首先被这个统一的事件监听器处理,然后在映射里找到真正的事件处理函数并调用

    当事件发生时,首先被这个统一的事件监听器处理,然后在映射里找到真正的事件处理函数并调用

    这样做的有点是解决了兼容性的问题,并且简化了事件处理和回收机制,但是有些事件React并没有实现,比如window的resize事件

    [email protected]版本中

    • 所有事件都是委托在root的DOM元素中(以前是在document中)
    • 应用中所有节点的事件监听其实都是在root的DOM中触发的
    • React自身实现了一套事件冒泡捕获机制
    • React实现了合成事件SyntheticEvent
    • React在17版本不在使用事件池了(使用对象池来管理合成事件对象的创建销毁是在16及以前的版本)
    • 事件一旦在root中委托,其实是一直在触发的,只是没有绑定对应的回调函数

    之所以会将事件委托从document中移到root的DOM元素上,是为了可以更加安全地进行新旧版本的React树的嵌套