Redux中的只读状态

时间:2017-04-28 07:52:29

标签: redux state

在Redux文档中,可以清楚地解释:
改变状态的唯一方法是发出动作 事实上,这是一个非常好的原则,但似乎有可能这样做:

const render = () => {
	document.getElementById("container").innerHTML = "state : " + JSON.stringify(myStore.getState())
  myStore.getState().form.subobj.ssub.key2 = "ha ha";
};

Full code here

为什么redux不能防止外部突变? 我们如何确保开发人员永远不会这样做?

2 个答案:

答案 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.jsdot-prop-immutable