javascript - Redux 的 .getState() 不应该返回状态对象的副本吗?

标签 javascript redux

我目前正在潜入 Redux 领域,自从我理解了 reducer 是一个多么简单的概念后,我不得不说我真的很兴奋。

但是,我在标题中提出的问题让我觉得很奇怪。

既然状态对象的不变性是 Redux 的核心支柱,那么 .getState() 不应该吗?方法返回 currentState 的副本,这样它就不会暴露在环境中,因此不可能改变它?

最佳答案

这里有两个原因:1) 在一个合适的 Redux 应用程序中,你永远不应该尝试直接改变 State,所以 getState() 结果只能通过 getter 使用,所以没有必要浪费复制的时间和周期; 2)实际上,要以正确的方式复制它并不是那么容易。引用corresponding issue的相关讨论:

You'd have to due a deep object assign to truely destroy all references and we wouldn't want to do that, as you wouldn't be able to compare if a particular part of your state tree changed, which is incredibly useful in React via shouldComponentUpdate.

仍然,人们可能会认为在检索到的状态上使用 Object.freeze() 作为一种保护措施(防止在其他地方改变此类对象)是有益的。然而,过多地传递结果状态很少是一个好的模式(如 this answer 中所述)。

关于javascript - Redux 的 .getState() 不应该返回状态对象的副本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155804/

相关文章:

javascript - 使用请求模块发布表单数据 - Nodejs 和 Express

javascript - 如何在 Angular 2+ 中使用第三方 js 库而不安装类型?

javascript - 来自 matplotlib 的交互式_独立_输出

javascript - 请求失败,状态码 409 : React Front End & Python Flask Back End

javascript - 如何构建异步函数的测试?

javascript - 创建 Function.prototype.theSame 以便 f() 可以作为 f.theSame() 调用

javascript - 重新选择选择器功能未执行

javascript - 分派(dispatch)操作和状态更新时组件不重新渲染

asynchronous - Redux:使用异步中间件与在成功函数上分派(dispatch)操作

reactjs - 使用 IIFE 从 Thunk 调度 Redux 操作