Redux 的 .getState() 不应该返回状态对象的副本
Shouldn't Redux's .getState() return a copy of the state object?
我目前正在潜入Redux水域,自从我了解了减速器的概念是多么简单以来,我不得不说我真的很兴奋。
然而,我在标题上提出的问题让我感到奇怪。
由于状态对象的不变性是Redux的核心支柱,.getState()
方法不应该返回currentState
的副本,这样它就不会暴露在环境中,因此不可能改变它吗?
这里有两个原因:1)在适当的Redux应用程序中,您永远不应该尝试直接改变State,因此getState()
结果只能通过getter使用,因此无需浪费时间和周期进行复制; 2)事实上,以正确的方式复制它并不容易。引用相应问题中的相关讨论:
你必须分配一个深层次的对象才能真正摧毁一切 参考文献,我们不想这样做,因为您将无法 比较状态树的特定部分是否发生了变化,即 在 React 中非常有用,通过 shouldComponentUpdate。
尽管如此,人们可能会认为使用检索状态的Object.freeze()
作为保护措施是有益的(防止在其他地方改变此类对象)。但是,过多地传递结果状态很少是一个好的模式(如本答案中所述)。
我认为您将存储及其包含的状态与组件的状态混淆了。它们是两个不同的概念。当你调用 getState() 时,你会得到 "this" 组件的状态;显然你不应该修改它;但是,您可以使用 setState() 修改它,这会触发组件的重新绘制。相反,当您在化简器中并且操作导致化简器更改状态时,返回的状态必须始终是新对象。
相关文章:
- js,对象's状态监视
- redux 中状态对象的结构
- 如何将状态对象/数据传递给(异步)ajax 回调
- 你能在js中获得以前的历史状态对象吗
- 更新HTML5历史中以前的状态对象
- stampit.js“状态”对象不是实例安全的
- 相位器.js获取给定的无效相位器状态对象
- 使用 React 创建的表单不会更新支持状态对象
- AngularJs :将 stateParams 值附加到状态对象中的自定义数据
- Redux 的 .getState() 不应该返回状态对象的副本
- Nodejs使用回调函数缓存有状态对象
- 我可以只返回状态对象的一部分而不是整个状态对象的新副本吗
- 处理一个巨大的状态对象
- 访问pushState状态对象内容
- 调用mapStateToProps似乎传递了错误的状态对象
- 试图通过将状态对象放入变量来压缩我的ui-router状态定义.并# 39;t工作
- React路由器-动态路由-通过路由器访问状态对象
- HTML5历史API-状态对象的最大大小是多少
- React:您可以将setState与现有的状态对象一起使用吗
- Pubnub:无法获得带有存在事件的状态对象