我有一个锻炼应用程序,用户可以在其中输入“名称”和“体重”。然后他们被允许更新特定“名称”的“权重”。我无法弄清楚如何让他们这样做,到目前为止我得到的最接近的是每个“名称”的“权重”更新为完全相同的数字。例如,如果我有:
[
{
name: 'bench',
weight: 100
},
name: 'squat',
weight: 200
},
]
然后用户尝试仅将长凳的重量更新为 300,结果是长凳和深蹲都更新为 300。不过我只想更新长凳的重量。 到目前为止,这是我的代码。首先,我的行动:
export const addMovement = (formValues) => {
return {
type: constants.ADD_MOVEMENT,
payload: formValues,
}
};
export const updateMovement = (formValues) => {
return {
type: constants.UPDATE_MOVEMENT,
payload: formValues,
}
};
我的减速器:
const initialState = [];
const movementReducer = (state = initialState, action) => {
switch (action.type) {
case ADD_MOVEMENT:
return [ ...state, action.payload ];
case UPDATE_MOVEMENT:
return [
...state.map(item => Object.assign({}, item, { movementWeight: action.payload.movementWeight }))
];
default:
return state;
}
};
如果需要更多代码,我会提供,请询问。任何帮助或提示将不胜感激。
答案 0 :(得分:1)
如果您通过“名称”字段找到要更新的对象,那么您可以尝试:
case UPDATE_MOVEMENT:
return [
...state.map(item => item.name === action.payload ? action.payload : item )
];