В приложениях Angular с архитектурой NgRx Store и Redux обычно в хранилище хранятся массивы объектов. Однако обновление конкретного объекта в массиве в хранилище может быть немного сложным. В этой статье мы рассмотрим различные методы обновления объектов в массиве в хранилище NgRx, а также приведем примеры кода.
Метод 1: неизменяемое обновление с использованием оператора распространения и карты
Пример кода:
const updatedArray = state.array.map(item => {
if (item.id === updatedItem.id) {
return { ...item, ...updatedItem };
}
return item;
});
const newState = { ...state, array: updatedArray };
Метод 2: неизменяемое обновление с использованием карты и тернарного оператора
Пример кода:
const updatedArray = state.array.map(item =>
item.id === updatedItem.id ? { ...item, ...updatedItem } : item
);
const newState = { ...state, array: updatedArray };
Метод 3: неизменяемое обновление с использованием оператора распространения и findIndex
Пример кода:
const index = state.array.findIndex(item => item.id === updatedItem.id);
const updatedArray = [...state.array];
updatedArray[index] = { ...updatedArray[index], ...updatedItem };
const newState = { ...state, array: updatedArray };
Метод 4. Неизменяемое обновление с использованием оператора распространения и фильтра
Пример кода:
const updatedArray = state.array.filter(item => item.id !== updatedItem.id);
const newState = { ...state, array: [...updatedArray, updatedItem] };
Метод 5. Использование библиотеки immer для изменяемых обновлений
Пример кода:
import produce from 'immer';
const newState = produce(state, draftState => {
const index = draftState.array.findIndex(item => item.id === updatedItem.id);
if (index !== -1) {
draftState.array[index] = { ...draftState.array[index], ...updatedItem };
}
});
Обновление объектов в массиве в хранилище NgRx в Angular требует тщательного рассмотрения, чтобы сохранить неизменность и избежать мутации исходного состояния. В этой статье мы рассмотрели несколько методов достижения этой цели, в том числе использование операторов распространения, карты, фильтра и библиотеки immer для изменяемых обновлений. Эти методы гарантируют правильное обновление состояния при сохранении принципов Redux. Применяя эти методы, вы можете эффективно обновлять объекты в массиве в хранилище NgRx в своих приложениях Angular.
Не забудьте тщательно выбрать метод, который лучше всего соответствует вашему конкретному варианту использования и требованиям проекта.