Добавление данных в состояние в функции редуктора Ngrx

#javascript #angular #typescript #ngrx #ngrx-store

Вопрос:

Я изучаю интерфейс и пытаюсь создать угловое приложение, используя NgRx для управления состоянием.

У меня есть таблица сообщений. Я хочу удалить и добавить сообщения в хранилище. Я могу удалять строки с помощью функции редуктора, как показано ниже.

 function RemoveHandler(state: StoreMessages, action) {
    return {
        ...state,
        selections: state.selections.filter(messageId => messageId !== action.messageId),
        messages: state.messages.filter(item => item.messageId !== action.messageId),
        all: state.all.filter(item => item.messageId !== action.messageId)
    };
}
 

Это работает нормально, но моя логика для функции добавления сообщений не работает.

 function AddHandler(state: StoreMessages, action) {
        return {
            ...state,
            messages: state.messages.push(action.newMessage),
            all: state.all.push(action.newMessage)
        };
    }
 

Проблема в том, что метод pop возвращает длину массива, и, следовательно, длина присваивается свойствам «сообщения» и «все» моего состояния. Как я могу добавлять новые сообщения в свое состояние. Любая помощь будет признательна.

Ответ №1:

вам не нужен метод array.push в редукторе. первый код работает, потому что вы фильтруете массив, находящийся в состоянии. чтобы добавить данные в состояние, просто назначьте его следующим образом

 function AddHandler(state: StoreMessages, action) {
    return {
        ...state,
        messages: action.newMessage,
        all: action.newMessage
    };
}
 

или, если вы вставляете массив

 function AddHandler(state: StoreMessages, action) {
    return {
        ...state,
        messages: [...action.newMessage],
        all: [...action.newMessage]
    };
}
 

Комментарии:

1. Я придумал использовать контакт вместо толчка, но это наивно. Ваш подход больше похож на подход профессионала. Спасибо.