Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

executionContext 何时为空? #66

Open
DaphnisLi opened this issue Feb 23, 2022 · 2 comments
Open

executionContext 何时为空? #66

DaphnisLi opened this issue Feb 23, 2022 · 2 comments

Comments

@DaphnisLi
Copy link

文章中提到executionContext执行栈为空的时候,会取消 schedule 调度, 主动刷新回调队列flushSyncCallbackQueue()

那 executionContext 都在什么情况下为空呢?

@7kms
Copy link
Owner

7kms commented Feb 24, 2022

在react自身上下文之外触发更新时, executionContext就为空.

正常情况下的节点更新都是在合成事件的回调函数中,进行setState. 在执行这个回调之前, react已经设置好了executionContext

如果绕过react内部设置executionContext的时机, 比如在setTimeout的回调, 原生事件的回调, Promise.resolve回调等中去执行setState, 这个回调函数是js直接运行, 没有通过react内核来运行, 所以react没有机会设置executionContext, 此时就为空.

@DaphnisLi
Copy link
Author

在react自身时间之外触发更新的时候,executionContext就为空。

正常情况下,都是在合成事件的微不足道的功能中,进行的setState。在执行这个之前,react 已经设置好了executionContext

如果此时再把这个动作设置为内部设置executionContext的时机是直接的,setTimeout的回调, 原生事件的回调, Promise.resolve回调等中去执行设置,直接运行运行,没有通过react内核来,所以react没有机会设置executionContext,就为直接js运行。

哈哈,学习到了,这个解答太好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants