改变redux状态但也保留一些旧的状态值

时间:2017-07-27 21:41:34

标签: javascript redux react-redux pass-by-reference

在我的React-Redux应用程序中,我正在更改redux state,它看起来像这样

state {
    key1: oldVal1
    key2: oldArray1 //The value here is an array
    .
    .
    .
}

现在我下次更新状态......

state {
    key1: newVal1

    //But for key2 I want to keep the value as the same oldArray1
    //Now since that oldArray1 is not anywhere except in the old state, can I do this...?

    key2: state.key2
    .
    .
    .
}

因此,如果我key2: state.key2state.key2是一个数组,那么引用会因为状态发生变化而丢失,并且state.key2不会指向任何内容吗?

我只想粗略解释object/array引用如何影响redux中的状态。

2 个答案:

答案 0 :(得分:2)

您总是希望返回一个新状态 - 而不是改变现有状态。您可以使用spread运算符运算符返回保留旧状态的某些相同属性的新状态

export default  function(state = {}, action) {
switch(action.type) {
    case WHATEVER_ACTION:
         const newValue = action.payload.value; //assuming this comes from action
         return { ...state, key: newValue };
  }
}

这样您就可以使用新值更新要更新的密钥,但是您希望保留的所有内容都将保留其旧值,因为它会传播到newState对象中。

答案 1 :(得分:1)

请注意,Redux状态是不可变的,因此第一个状态和第二个状态是两个不同的对象,因此,如果使用Object.assign或其他不可变工具,则可以将旧值分配给新键。

      switch (action.type) {
        case SET_VISIBILITY_FILTER:
          return Object.assign({}, state, {
            key1: action.newVal1,
            key2: state.key1,
          })