Redux action 如何只更新一个对象状态

时间:2021-07-07 20:16:43

标签: redux react-redux state action reducers

我有一个锻炼应用程序,用户可以在其中输入“名称”和“体重”。然后他们被允许更新特定“名称”的“权重”。我无法弄清楚如何让他们这样做,到目前为止我得到的最接近的是每个“名称”的“权重”更新为完全相同的数字。例如,如果我有:

[
 {
  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;
    }
};

如果需要更多代码,我会提供,请询问。任何帮助或提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您通过“名称”字段找到要更新的对象,那么您可以尝试:

case UPDATE_MOVEMENT:
    return [
        ...state.map(item => item.name === action.payload ? action.payload : item  )
    ];