#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. Я придумал использовать контакт вместо толчка, но это наивно. Ваш подход больше похож на подход профессионала. Спасибо.