美文网首页
React事件绑定原理

React事件绑定原理

作者: 鸽屿_ | 来源:发表于2021-01-11 09:23 被阅读0次

    理解:react中的事件都是合成事件,不是把每一个dom的事件绑定在dom上,而是把事件统一绑定到document中,触发时通过事件冒泡到document进行触发合成事件,因为是合成事件,所以我们无法去使用e.stopPropagation去阻止,而是使用e.preventDefault去阻止。
    1.事件注册:组件更新或者装载时,在给dom增加合成事件时,需要将增加的target传入到document进行判断,给document注册原生事件回调为dispatchEvent(统一的事件分发机制)。

    2.事件存储:EventPluginHub负责管理React合成事件的callback,它将callback存储到listennerBank中,另外还存储了负责合成事件的Plugin,Event存储到listennerbank中,每一个元素在listennerBank中会有唯一的key。

    3.事件触发执行:点击时冒泡到docunment中,触发注册原生事件的回调dispatchEvent,获取到触发这个事件的最深层元素,事件执行利用react的批处理机制。
    案例

    <div onClick={this.parentClick} ref={ref => this.parent = ref}>
          <div onClick={this.childClick} ref={ref => this.child = ref}>
              test
          </div>
    </div>
    点击test后
    1.首先获取到this.child
    2.遍历此元素的所有父元素,依次对每一级元素进行处理
    3.构成合成事件
    4.将每一级的合成事件存储在eventQueen事件队列中
    5.遍历,是否组织冒泡,是则停止,否则继续
    6.释放已经完成的事件
    

    4.合成事件:循环所有类型的eventPlugin,对应每个事件类型,生成不同的事件池,如果是空,则生成新的,有则用之前的,根据唯一key获取到指定的回调函数,再返回带有参数的回调函数。

    5.总流程:组件装载/更新 -- 新增/删除事件 -- eventplugin添加到ListennerBank中监听事件 -- 触发事件 -- 生成合成事件 -- 通过唯一key获取到指定函数 -- 执行指定回调函数 -- 执行完毕后释放

    相关文章

      网友评论

          本文标题:React事件绑定原理

          本文链接:https://www.haomeiwen.com/subject/dguraktx.html