例如,一个组件的初始状态为{loading: true, setup: true}
,并且在更改状态时如下所示:
this.setState({
loading: false,
setup: false
})
在实际DOM上,是否有机会
loading
是false
而setup
仍然是true
? 因为据我所知(如果我错了,请纠正我),通过VDOM进行更新的过程如下:diff queue
requestAnimationFrame
)批处理diff queue
中的所有更改。然后按顺序将所有变异应用于DOM。 由于我们将所有补丁按顺序应用到DOM,因此我假设会有一段时间
loading: false
和setup: true
吗? 最佳答案
不,我很确定没有机会将setState
拆分为单独的更新,可以将其分别传递给DOM。
它不是那样工作的。
首先: VDOM将在一次fn调用中同时更新两项更改。
第二: DOM不会使用“部分就绪”更新进行更新。当某些(并行)进程尚未准备就绪时,差异(由于Fiber)可能会延迟DOM更新的片段。
关于javascript - setState的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52755615/