React- Redux 6.0版本提到:
在版本6中,所有组件都从上下文读取相同的当前存储状态值,这意味着树将是一致的并且没有“撕裂”。
我知道这是有益的,但是我想更好地理解“撕扯”在这种情况下的含义,并且我想了解他们概述的新方法如何实际上减少了“撕扯”,如果有人可以详细说明的话。
我是Redux的维护者,我写了那一段。
当与React即将推出的“并行模式”一起使用时,这是React团队的Andrew Clark提出的一个外部状态管理工具的潜在问题,这是一个特别令人担忧的问题。
在并发模式下,React将能够暂停通过树的渲染过程,并在以后继续计算树的其余部分。
如果树中的组件正在读取一个外部值,并且在React的渲染暂停时该值发生了变化,那么树中的某些上层组件可能已经使用外部值1进行了渲染,而某些后来的组件可能已经使用外部值1进行了渲染。使用外部值2。这将导致不一致的渲染输出,因为树的不同部分基于同一渲染过程中的不同值来确定其行为。这是“撕裂”。
使用createContextv6 背后的部分想法是,由于React确保给定的渲染过程在任何地方都使用相同的上下文值,因此不会有撕裂的机会。
createContext
v6实现确实可以工作,但在某些情况下效率不如我们希望的那样。我们目前正在研究一种不同的内部实现,该实现可以追溯到使用直接订阅。这确实意味着再次有可能撕裂,但是在这一点上,我们需要坐下来等待React团队完成并发模式的整合,然后才能花时间了解问题的实质。