【发布时间】:2017-07-05 16:00:32
【问题描述】:
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 模型的克隆吗?
附:这与 Angular 没有特别的关系——这就是我没有添加标签的原因——让更多不习惯 Angular 的人回答这个问题。
【问题讨论】: