Я пытаюсь использовать операторы состояния NGXS внутри моего приложения, но у меня возникают проблемы с поиском хороших примеров того, как использовать их для чуть более сложных обновлений.
Например, документация NGXS показывает пример обновления этого состояния:
@State<AnimalsStateModel>({
name: 'animals',
defaults: {
zebras: ['Jimmy', 'Jake', 'Alan'],
pandas: ['Michael', 'John']
}
})
Чтобы изменить имена одной из панд, он использует оператор состояния "updateItem" NGXS, например:
@Action(ChangePandaName)
changePandaName(ctx: StateContext<AnimalsStateModel>, { payload }: ChangePandaName) {
ctx.setState(
patch({
pandas: updateItem(name => name === payload.name, payload.newName)
})
);
}
В этом примере функция updateItem использует лямбда-выражение в своем первом параметре для поиска правильного объекта в массиве и заменяет его на объект во втором параметре.
Как бы вы сделали это с массивом, содержащим сложные объекты, для которых вы хотели изменить значение только одного свойства? Например, что если бы мое состояние было таким:
@State<AnimalsStateModel>({
name: 'animals',
defaults: {
zebras: [{1, 'Jimmy'} , {2, 'Jake'}, {3, 'Alan'}],
pandas: [{1, 'Michael'}, {2, 'John'}]
}
})
Как бы я использовал функцию updateItem, чтобы найти правильное животное, используя идентификатор, а затем обновить имя?