为什么在redux中通过操作更改状态会有所帮助?

时间:2019-03-19 17:51:40

标签: redux

发件人:https://redux.js.org/introduction/three-principles

  

状态为只读。更改状态的唯一方法是发出一个动作,一个描述发生了什么的对象。这样可以确保视图和网络回调都不会直接写入状态。相反,他们表达了改变国家的意图。因为所有更改都是集中的,并且严格按照顺序进行,所以没有任何微妙的竞争条件值得关注。由于动作只是简单的对象,因此可以将它们记录,序列化,存储并在以后重播,以进行调试或测试。

对此我产生了两个问题……

  1. redux如何强制更改按严格顺序进行?如果我同步更改状态,那么我不明白为什么这会成为问题。如果我想按顺序在异步事件1和异步事件2之后更改状态,那么我是否不必做诸如使用回调或promise之类的事情,而不管我是否使用redux来确保状态按照我期望的顺序改变?
  2. 为什么记录操作更容易?如果我不使用redux,难道我不能只是console.log记录我所做的每个状态更改,以使其更易于调试和测试吗?我是否只是通过学习redux来节省每次状态更改时编写console.log的时间?

1 个答案:

答案 0 :(得分:0)

要回答您的问题:

  1. redux的执行是同步的,因此当您调度动作时,您正在redux存储上执行一个方法,该方法调用reducer来计算新状态。 redux中不存在“异步动作”的概念,这就是为什么您有许多启用它们的解决方案的原因:redux-thunk,redux-saga,redux-observable等。所有“异步操作”库最终都必须同步执行调度功能才能更改redux状态。

  2. 在编写良好的redux应用程序中,对redux存储区中包含的任何状态的更改只能由从可访问调度功能的应用程序中某处调度的操作引起。这使您可以完全控制并了解状态更改的位置和方式。那就是redux的主要卖点:“可预测的状态容器”。您当然可以将局部状态存储在某个全局变量中,然后手动对其进行突变,但是随后您必须对该状态变量使用类似Object.observe(实际上已弃用,看不到替换物)的名称,以监视对其的更改。