【问题标题】:Changing redux state but also retain some old values of state更改 redux 状态但也保留一些旧的状态值
【发布时间】:2018-01-03 19:32:41
【问题描述】:

在我的 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 已更改并且 state.key2 不会指向任何东西?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你总是想返回一个新的状态——而不是改变你现有的状态。您可以使用扩展运算符返回一个新状态,该状态保留了旧状态的一些相同属性

      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对象中。

      【讨论】:

      • 所以第二次更改状态时,我返回了一个新对象,但它的值之一是从以前的状态获得的,它是对数组的引用……这是我真正关心的问题
      • 如果我正确理解您的问题,状态上的初始数组是对数组的引用。因此,当您将其放入新状态时,您只是将相同的数组(或对其的引用)分配给新状态的键。
      猜你喜欢
      • 2017-09-21
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多