在Redux文档中,可以清楚地解释:
改变状态的唯一方法是发出动作
事实上,这是一个非常好的原则,但似乎有可能这样做:
const render = () => {
document.getElementById("container").innerHTML = "state : " + JSON.stringify(myStore.getState())
myStore.getState().form.subobj.ssub.key2 = "ha ha";
};
为什么redux不能防止外部突变? 我们如何确保开发人员永远不会这样做?
答案 0 :(得分:1)
来自Redux
的源代码:
var finalState = mapValues(finalReducers, (reducer, key) => {
var previousStateForKey = state[key]
var nextStateForKey = reducer(previousStateForKey, action)
if (typeof nextStateForKey === 'undefined') {
var errorMessage = getUndefinedStateErrorMessage(key, action)
throw new Error(errorMessage)
}
hasChanged = hasChanged || nextStateForKey !== previousStateForKey
return nextStateForKey
})
Redux
combineReducers
将状态对象视为纯JavaScript对象
您必须使用immutablejs
之类的内容与redux
一起使用,以达到您想要的效果。
答案 1 :(得分:1)
对象的不变性不是Redux的工作。
Redux是JavaScript应用程序的可预测状态容器。
要使用不可变对象,您可以考虑使用Immutable.js
或dot-prop-immutable
。