неизменное обновление массива объектов в реду - PullRequest
1 голос
/ 17 января 2020

Я тут мутирую, но не хочу! Все мои попытки не изменять состояние возвращались с синтаксическими ошибками, поэтому я обратился сюда.

это моя структура данных с избыточностью:

controls: (array)[
    0:
        id: "e06c5fbf-6d57-4f5b-a601-bfc4ad265def"
        status: 'complete'
        files: []
    1:
        id: "e06c5fbf-6d57-4f5b-a601-bfc4ad265def"
        status: 'complete'
        files: []
    ...
    ]

// и мой редуктор

export default function frameworkReducer(state = initialState, action) {
    case RECEIVE_CONTROL_STATUS_UPDATE:
            const index = action.payload.index;
            const newState = {...state};
            newState.controls[index] = { ...state.controls[index], status: action.payload.value };
            return newState

Ответы [ 2 ]

1 голос
/ 17 января 2020

Это сработало для меня:

// Редуктор

    let index = action.payload.index
    let controls = [...state.controls];
    controls[index] = {...controls[index], status: action.payload.value};
    return {...state, controls}
0 голосов
/ 17 января 2020

Если вы находите и обновляете определенную строку / элемент.

           case RECEIVE_CONTROL_STATUS_UPDATE:
            let findItem = state.controls.find(a=>a.index===action.payload.index);
            let filtered = state.controls.filter(a=>a.index!==action.payload.index);
            let updateState = [filtered, findItem];
            return {
              ...state,
              constrols: updatedState
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...