На данный момент встаёт вопрос использования Redux в Ангуляр приложении. Redux - мощный инструмент для разработки (особенно для средних и больших приложений, которое и планируется разрабатывать). Однако, есть большие сомнения на этот счёт. В приложении, о котором идёт речь много иерархических структур (иногда уровней больше 3) и тогда, код с использованием Redux (на данный момент внедряем ngsx) для компоненты будет выглядеть примерно так (код максимально упрощён для отражения только идеи):
export class SomeComponent {
tableData: TreeTableData = new TreeTableData();
//build TreeTableData for tree table view
builder: SomeBuilder;
public pageSize:number;
public page:number;
@Select(SomeState.state) state$: Observable<StateModel>;
constructor(private store: Store) {
//...
//instantiate and configure builder
//...
this.state$.subscribe(patientState => {
this.tableData = this.builder.build(state.items);
this.restorePaginator();
this.tableData.isLoading = state.loading;
});
this.builder.expandRowCallback = (row, tableData) => {
///...
//dispatch that row is expanded
///...
};
this.builder.tableConfig.events.rowCollapsed = (row, tableData) => {
///...
//dispatch that row is collapsed
///...
};
}
private restorePaginator() {
if(this.pageSize)
this.tableData.pageSize = this.pageSize;
if(this.page)
this.tableData.page = this.page;
}
onPageNumberChanged(page:number) {
this.page = page;
}
onPageSizeChanged(pageSize:number) {
this.pageSize = pageSize;
}
}
Т.е. для корректного восстановления состояния иерархического вью приходится каждый раз оповещать хранилище об изменении статуса скрытия/раскрытия строки. И это только вопрос раскрытия/скрытия.