Skip to content

react中的代码细节 #2

@BUPTlhuanyu

Description

@BUPTlhuanyu

facebook/react#14226

在16.8中的scheduler中用到window.postmessage,这样会存在两个问题:

  1. 不是scheduler中的message处理函数也会被执行
  2. 不是scheduler中的postmessage会导致触发scheduler中的message处理函数。
    为了避免第二个问题,scheduler中的message处理函数会判断接收的数据中是否有messageKey,如果没有那么是不会继续执行下去的。
    但是第一个问题避免不了,每次postmessage都会执行与react-scheduler不相关的message事件处理函数。

现在最新的scheduler直接使用new MessageChannel来解决第一个问题,建立一个通信信道,利用port.postmessage代替window.postmessage,利用port.onmessage代替window.addEventListener('message', ...)。这个port实际就是这个MessageChannel专属的,不会导致信号串扰。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions