阻止代码更改商店状态的原因

  • 本文关键字:状态 代码 redux getstate
  • 更新时间 :
  • 英文 :


store具有一种称为getState的方法,该方法将返回商店的当前状态。

是什么阻止了我的应用程序中某个地方的代码(偶然地)从store修改返回的state

假设我称之为:

let state = store.getState();
state.someProperty = 'fun';

我在store对象上在getState上找到的实现,只需返回每个新操作被覆盖的内部状态对象。

const getState = () => state;

在动作/新状态之间,什么阻止代码修改另一个订户将读取的状态?在我的上面示例中,将someProperty设置为'fun'将在state属性的store内持续存在,直到覆盖为止。

虽然我显然不应该修改状态,但一个简单的错误可能会将状态绑定到某种(在不知不觉中)修改其输入的组件 - 也许在角度环境中的2路绑定上?

<app-some-component [user]="state"></app-some-component>

不应该将getState()作为其state模型的克隆实现吗?

P.S。这与Angular无关 - 这就是为什么我没有添加标签 - 允许更多的人不用朝角来回答问题。

答案是: nothing :)

从技术上讲,核心Redux库本身并不在乎状态是否被突变。实际上,您可以在还原器中突变,或者让应用程序的其他部分获取状态树并将其变异,并且商店本身不会知道或关心。

然而,突变会打破时间到达调试,并使测试不可靠。更重要的是,React-Redux库假定您将不成熟地处理您的状态,并依靠浅层平等比较来查看状态是否发生了变化。(这就是为什么"为什么我的组件不重新渲染?"的原因是Redux常见问题解答99.9%,这是由于意外突变所致。)

如果您担心突变,则可以使用诸如Immutable.js的库代替普通JS对象,或者使用几种工具之一将您的状态冻结在开发中捕获突变。

相关内容

  • 没有找到相关文章

最新更新