У меня есть магазин с двумя полями:
items: Item[]
money: number
Когда пользователь покупает товар , я звоню на apiService и если ответ от сервера позволяет добавить элемент (сервер проверит, достаточно ли у пользователя денег) Я могу сделать два изменения в моем магазине :
- pu sh новый элемент в массиве
- уменьшение денег
Я не совсем понимаю, что такое хорошая практика при отправке действий ... Какие путь самый лучший?
- Multi-диспетчеризация - отправка
AddItem
действие и DecreaseMoney
действие:
store.dispatch([new AddItem(), new DecreaseMoney()]);
Подписаться
AddItem
действие и рассылка
DecreaseMoney
действие при первом успешном выполнении:
this.actions$.pipe(ofActionSuccessful(AddItem)).subscribe(() => {store.dispatch(new DecreaseMoney()});
Отправка
DecreaseMoney
Действие внутри
AddItem
Действие:
@Action(AddItemAction)
AddItem({ getState, setState }: StateContext<any>) {
const state = getState();
return this.http.post(`${apiUrl}/buy`, {}).pipe(
tap(newItem => {
setState({...state, items: [...state.items, newItem]});
dispatch(new DecreaseMoney()); // <---
})
);
}