如何在减速器中替换状态中的对象
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
)
}
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
)
}