在我的reducer状态下,我拥有数组
grounds: [
{
name: 'name1',
id: 123
}
{
name: 'name2',
id: 456
}
{
name: 'name3',
id: 789
}
]
我正在调度一个类似这样的动作
export const renameGound = (newName, id) => {
return{
type: RENAME_GROUND,
newName: newName,
id: id
}
}
我想要的是将名称值更新为具有我作为action.id获得的ID的对象。这是我尝试过的方法,它不起作用。
case actionTypes.RENAME_GROUND:
return{
...state,
grounds: state.grounds.forEach(el => {
if(el.id === action.id){
el.name = action.newName
}
})
}
在上面所述的推杆式装载机的情况下,我错误地代替了理由,它可以工作,我不知道如何,但是它可以工作。但是当我这样尝试时……... p
如何更新正确的对象正确方法?
答案 0 :(得分:4)
您能在reducer中尝试下一个代码吗?
return {
...state,
grounds: state.grounds.map(el => {
if (el.id === action.id) {
return {
...el,
name: action.newName
};
}
return el;
})
};
还原剂保持纯净非常重要。您永远不要在内部更改其参数。
更多信息可以在Redux documentation
中找到答案 1 :(得分:0)
您应使用reduce语法,如下所示:
return{
...state,
grounds: state.groundgrounds.reduce((newGrounds, ground) => {
if(ground.id === action.id) {
newGrounds.push({
...ground,
name: action.name
})
} else {
newGrounds.push(ground)
}
return newGrounds;
}, [])
}