我最近学习了 Redux。
我很理解这个概念,但我没有弄清楚 official documentation 中的这一行:
Because all changes are centralized and happen one by one in a strict order, there are no subtle race conditions to watch out for.
Redux 如何保证没有微妙的竞争条件?
确实,我可以想象这个场景(按顺序):
- 一些组件调度 ACTION_TYPE_1。
- 一些组件调度 ACTION_TYPE_2。
- ACTION_CREATOR_1 调用 ajax 来获取一些数据。
- ACTION_CREATOR_2 调用 ajax 来获取一些数据。
- ACTION_CREATOR_2 在 ACTION_CREATOR_1 之前处理抓取的数据。
- 由于这种竞争条件可能会出现奇怪的行为?
因此, Action 创建者分派(dispatch)的操作会按顺序应用,但这些 Action 创建者的实现可能不会按顺序应用,这可能会导致代码不确定。
如何计算报价?
我可以理解,对于 Redux,有一种关于调度 Action 历史的trace(有助于理解运行时的程序工作流程),但是这些 Action 的真正实现呢?
最佳答案
我刚遇到 this point ,非常有意义,作者是@DanAbramov 本人。
我认为它很好地回答了我的 OP。
关键是只要 Action 的调度保持同步(尽管 Action 创建者的内部过程可能根本不同步),就很容易快速找出竞争条件(或其他关于非确定性的问题)通过建立和记录 dispatch 行动的历史。
特别是很容易重现“怪异”状态,然后找出如何避免它(如 Event-Sourcing )。
如果没有任何同步可见的时间点,就很难掌握发生了什么;这就是 Redux 带来好处的原因。
Redux 不会避免竞争条件,但确实会大大减少微妙(难以分析)的竞争条件,如文档所述。
关于javascript - Redux 如何保证没有竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081849/