例如,一个组件的初始状态为{loading: true, setup: true},并且在更改状态时如下所示:

this.setState({
  loading: false,
  setup: false
})

在实际DOM上,是否有机会loadingfalsesetup仍然是true因为据我所知(如果我错了,请纠正我),通过VDOM进行更新的过程如下:
  • 将所有更改添加到diff queue
  • 以60FPS(通过requestAnimationFrame)批处理diff queue中的所有更改。然后按顺序将所有变异应用于DOM。

  • 由于我们将所有补丁按顺序应用到DOM,因此我假设会有一段时间loading: falsesetup: true吗?

    最佳答案



    不,我很确定没有机会将setState拆分为单独的更新,可以将其分别传递给DOM。

    它不是那样工作的。

    首先: VDOM将在一次fn调用中同时更新两项更改。

    第二: DOM不会使用“部分就绪”更新进行更新。当某些(并行)进程尚未准备就绪时,差异(由于Fiber)可能会延迟DOM更新的片段。

    关于javascript - setState的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52755615/

    10-16 00:24