我目前正潜入Redux水域,自从我明白减压器的概念简单之后,我不得不说我真的很兴奋。
然而,我在标题上提出的问题令我感到奇怪。
由于状态对象的不变性是Redux的核心支柱,因此.getState()
方法不应该返回cordova platform add android
的副本,这样它就不会暴露在环境中因此不可能改变它?
答案 0 :(得分:3)
这里有两个原因:1)在正确的Redux应用程序中,你永远不应该尝试直接改变状态,因此getState()
结果只能通过getter使用,因此不需要浪费时间复制周期; 2)事实上,以正确的方式复制它并不容易。引用corresponding issue:
你必须分配一个深层对象才能真正摧毁所有 参考,我们不希望这样做,因为你无法做到 比较你的状态树的特定部分是否发生了变化,即 通过shouldComponentUpdate在React中非常有用。
但是,人们可能会认为使用Object.freeze()
超过检索到的状态作为保护措施(防止在其他地方改变这样的对象)是有益的。但是,过多地传递结果状态很少是一种好的模式(如this answer中所述)。
答案 1 :(得分:0)
我认为您将商店及其包含的状态与Component的状态混淆。 它们是两个不同的概念。 当你调用getState()时,你会得到"这个"的状态。零件;显然你不应该修改它;但是你可以使用setState()修改它,这会触发组件的重绘。 相反,当你在reducer中并且一个动作导致reducer更改状态时,返回的状态必须始终是一个新对象。