【发布时间】:2019-07-20 08:39:10
【问题描述】:
React-Redux 的 6.0 版提到:
在版本 6 中,所有组件都从上下文中读取相同的当前存储状态值,这意味着树将保持一致并且不会出现“撕裂”。
我知道这是有益的,但我想更好地理解“撕裂”在这种情况下的含义,并且我想了解他们概述的新方法实际上如何减少“撕裂”,如果有人可以的话详细说明。
【问题讨论】:
标签: javascript reactjs redux react-redux
React-Redux 的 6.0 版提到:
在版本 6 中,所有组件都从上下文中读取相同的当前存储状态值,这意味着树将保持一致并且不会出现“撕裂”。
我知道这是有益的,但我想更好地理解“撕裂”在这种情况下的含义,并且我想了解他们概述的新方法实际上如何减少“撕裂”,如果有人可以的话详细说明。
【问题讨论】:
标签: javascript reactjs redux react-redux
我是 Redux 维护者,我写了那段。
当与 React 即将推出的“并发模式”一起使用时,这是由 React 团队的 Andrew Clark 作为外部状态管理工具的潜在问题提出的。
在并发模式下,React 将能够暂停渲染通过树,然后继续计算树的其余部分。
如果树中的组件正在读取一个外部值,并且在 React 的渲染暂停时该值发生了变化,那么树中的一些上层组件可能已经使用外部值 1 进行了渲染,而后面的一些组件可能已使用外部值 2 进行渲染。这将导致渲染输出不一致,因为树的不同部分根据同一渲染过程中的不同值确定其行为。这是“撕裂”。
在 v6 中使用 createContext 背后的部分想法是,由于 React 确保给定的渲染通道在任何地方都使用相同的上下文值,因此不会有撕裂的机会。
v6 实现确实有效,但在某些情况下并没有我们希望的那么高效。我们目前是working on coming up with a different internal implementation that goes back to using direct subscriptions instead。这确实可能意味着再次出现撕裂的可能性,但在这一点上,我们需要坐下来等待 React 团队完成并发模式的整合,然后我们才能花时间了解问题到底是什么。
【讨论】: