0

store一个方法被调用getState,它将返回商店的当前状态。

是什么阻止我的应用程序中某处的代码(意外)修改返回state的 from store

假设我称之为:

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

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

const getState = () => state;

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

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

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

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

PS 这与 Angular 没有特别的关系——这就是我没有添加标签的原因——让更多不习惯 Angular 的人回答这个问题。

4

1 回答 1

1

答案是: 没有:)

核心 Redux 库本身在技术上实际上并不关心状态是否发生突变。您实际上可以在您的减速器中进行变异,或者让您的应用程序的其他部分获取状态树并对其进行变异,而商店本身不会知道或关心。

但是,突变会破坏时间旅行调试,并使测试不可靠。更重要的是,React-Redux 库假设您不可变地处理您的状态,并依靠浅层相等比较来查看状态是否已更改。(这就是为什么“为什么我的组件没有重新渲染?”在 Redux 常见问题解答中的原因。99.9% 的时间,这是由于意外突变。)

如果你担心突变,你可以使用像 Immutable.js 这样的库而不是普通的 JS 对象,或者使用几种工具之一来冻结你在开发中的状态来捕获突变

于 2017-02-16T16:54:45.277 回答