React Redux,使用不变性更新状态的一部分

时间:2018-08-30 10:43:25

标签: reactjs redux react-redux immutability reducers

在redux reducer状态下,我想更新对象的对象内的属性。

    {
    users:{
        '1':{id:'1', name:'', items:[], ....}
        '2':{id:'1', name:'', items:[], ....}
         ...
         }
    }

我只想更新对象items中的对象,其中键1 or 2或其他任何键,其余状态保持不变。操作包含键号action.id,而action.payload包含字符串。

我很困惑spreadupdate的工作方式,以及如何保持其余users个对象不变。

当然我的代码是错误的:)但我尝试过

case types.UPDATE_ITEMS: {
      return update(...state, {
        [action.id]: { items: { $set: action.payload } }
      });
    }

2 个答案:

答案 0 :(得分:0)

这正是update的用法,它将保持其余状态不变。因此无需传播

   case types.UPDATE_ITEMS:
          return update(state, {
            [action.id]: {
              items: { $set: action.payload }
            }
          });

答案 1 :(得分:-1)

您可以使用其余的价差运算符仅更新users部分:

case types.UPDATE_ITEMS:
  return {
    ...state, // That will keep any other keys in the object besides 'users'
    users: {
      ...state.users, // keep the part you want to keep from 'users',
      [action.id]: {
        ...state.users[action.id], // keep the part you want from this user
        items: [action.payload] // update the part you want
      }
    }
  };