Angular 6 ngrx, как добавить новый элемент в массив в объекте состояния? - PullRequest
0 голосов
/ 31 августа 2018

У меня простая ситуация, у меня есть действия, такие как CreatUser, CreateSuccess, CreateFail. Как добавить новый объект в массив и когда отправляется действие Create или CreateSuccess? И как мне это сделать?

export function reducer(state = init, action: Actions): State {
switch (action.type) {
    case ActionsTypes.CREATE:
        return {
            ...state,
            inProgress: true
        };
    case ActionsTypes.CREATE_SUCCESS:
        return {
            ...state,
            users: state.users.push(action.payload),
            inProgress: false
        };
    case ActionsTypes.CREATE_FAIL:
        return {
            ...state,
            error: action.payload,
            inProgress: false
        };
    default:
        return state;
}

В приведенном выше коде я пытался добавить нового пользователя методом push, но это не очень хорошее решение. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Попробуйте использовать оператор распространения , поскольку он создает новый массив пользователей и не изменяет предыдущий массив.

users: [...state.users, action.payload]

Или же использовать @ ngrx / entity модуль для массивов. Это лучший способ.

Обновление 13.07.2019

Новый модуль @ ngrx / data доступен в NgRx 8. Этот модуль помогает создать хранилище CRUD для массивов с нулевым образцом.

0 голосов
/ 31 августа 2018

Ваше состояние должно быть неизменным, поэтому лучше использовать

users: state.users.concat(action.payload)
...