У меня есть состояние со значением по умолчанию.У меня есть компонент, который имеет селектор и блок подписки в его ngOnInit.Странно, но данные, поступающие из серверной части, перезаписываются в этом блоке подписки, потому что данные инициализации поступают позже, чем реальные данные, которые мне нужны ... Консольные операторы журнала в следующем порядке:
ngOnInit initData (со значением состояния по умолчанию)pre PatchState searchInit (данные поступили с сервера) initData (данные поступили с сервера) initData (со значением состояния по умолчанию)
Я попытался подписаться с pipe (first ()), также пробовал в блоке setTimeout,не знаю, что происходит ...
код:
состояние:
@State<XStateModel>({
name: 'x',
defaults: {
searchInitData: {
types: [ { id: 1, imageUrl: '', name: 'd'} ],
}
}
})
@Action(FetchXSearchInitData)
getSearchInitData({ getState, patchState }: StateContext<XStateModel>) { this.xService.getXSearchInitData().subscribe(initData => {
console.log('pre PatchState searchInit', initData);
patchState({
searchInitData: initData
});
});
}
компонент:
@Select(XState.searchInitData)
searchInitData$: Observable<XSearchInitData>;
ngOnInit() {
console.log('ngOnInit');
this.store.dispatch(new FetchXSearchInitData());
this.searchInitData$
.subscribe(
(result: XSearchInitData) => {
if (!result) {
console.log('NULL init data');
return;
}
console.log('initData', result);
}
);