Есть вещь под названием «Композиция». https://ngxs.gitbook.io/ngxs/advanced/composition
И я надеялся, что это позволит мне создать многоразовое состояние для всех моих сеток. Нравиться:
@State<GridStateModel<any>>({
name: 'basegridstate',
defaults: {
total: 0,
rows: []
}
})
export class BaseGridState {
@Action(LoadGridRows)
loadRows({patchState, dispatch, setState}: StateContext<GridStateModel<any>>) {
patchState({
total: 2,
});
}
}
А потом я захотел продлить его много раз, так как использовать в каждой сетке, чтобы иметь собственные данные.
Нравиться
@State<GridStateModel<Product>>({
name: 'cataloggrid',
defaults: {
total: 0,
rows: []
}
})
export class CatalogGridState extends BaseGridState {
@Action(LoadCatalogRows)
loadCatalogRows({patchState, dispatch, setState}: StateContext<GridStateModel<any>>) {
patchState({
total: 3,
});
dispatch(new LoadGridRows());
}
}
Но проблема в диспетчерском вызове LoadGridRows для всех остальных состояний, расширяющих базовый :(
Есть ли способ заставить его работать только с текущим состоянием? Или, может быть, какой-то другой подход к повторному использованию состояний с той же логикой, но с пользовательскими данными?
Это невозможно в NGXS. Эта библиотека управления состоянием основана на CQRS, и действия не привязаны к состоянию, что означает, что все действия являются глобальными.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы когда-нибудь догадывались об этом? Это как раз та проблема, которую я пытаюсь решить.