如何在减速器中替换状态中的对象

How to replace an object in state in a reducer

const initialState = []

case UPDATE_USER: {
  console.log(action, "this is action");
  return [
    ...state,
    state.map(
      user =>
        user.name === action.oldName
          ? {
              ...user,
              name: action.newName
            }
          : user
    )
  ];
}

所以我有这个初始状态。然后这是我对 reducer

的案例陈述之一

我正在尝试用新的用户对象替换对象(用户)。 所以我试图映射数组,然后用旧名称和新名称替换它。新旧名称正确通过。然而,这目前正在将 10 个对象的数组更改为 10 个对象的数组加上数组的最后一项是 10 个对象的数组。非常混乱但本质上

数组从长度 10 增长到长度 11

即使它应该保持不变

数组的最后一项(本身就是一个数组)就是我想要的新状态的数组

这是否有意义?

基本上很接近,但还不够

而不是使用 spread syntax,您需要做的就是 return the mapped value,因为您正在迭代 reducer 状态并单独克隆映射中的内部对象。

case UPDATE_USER: {
  console.log(action, "this is action");
  return state.map(
      user =>
        user.name === action.oldName
          ? {
              ...user,
              name: action.newName
            }
          : user
    )
}