Redux 如何保证无竞争条件?

Mik*_*378 6 javascript ajax race-condition reactjs redux

我最近了解了 Redux。我很好理解这个概念,但我没有在官方文档
中弄清楚这一行:

由于所有更改都是集中的,并且按照严格的顺序一一发生,因此没有需要注意的微妙竞争条件。

Redux 如何保证没有微妙的竞争条件?

事实上,我可以想象这个场景(按顺序):

  1. 某些组件调度 ACTION_TYPE_1。
  2. 某些组件调度 ACTION_TYPE_2。
  3. ACTION_CREATOR_1 进行 ajax 调用来获取一些数据。
  4. ACTION_CREATOR_2 进行 ajax 调用来获取一些数据。
  5. ACTION_CREATOR_2ACTION_CREATOR_1 之前处理抓取的数据。
  6. 由于这种竞争条件可能会出现奇怪的行为吗?

因此,操作创建者分派将按顺序应用,但这些操作创建者的实现可能不会按顺序应用,可能会导致不确定的代码。

如何计算报价?

我可以理解,使用 Redux,可以对已调度操作的历史记录进行某种跟踪(有助于理解运行时的程序工作流程),但是这些操作的实际实现又如何呢?

Mik*_*378 3

我刚刚遇到了@DanAbramov 本人提出的这一点,非常有意义。

我认为它很好地回答了我的OP。

要点是,只要操作的分派保持同步(尽管操作创建者的内部流程可能根本不同步),就可以通过建立和记录来快速找出竞争条件(或有关非确定性的其他问题)已调度操作的历史记录。
特别是很容易重现“奇怪”的状态,然后找出如何避免它(例如Event-Sourcing)。

如果没有任何同步、可见的时间点,就很难掌握发生了什么;这就是 Redux 带来好处的原因。

正如文档所述,Redux 不会避免竞争条件,但确实会大大减少微妙(难以分析)的竞争条件。