我有一个非常复杂的应用程序,它通过websocket(用于对象更新)和http(用于获取初始对象)与服务器通信。
但是我正面临以下情况:
所以基本上我处于这种状态:
export const initialState: IMatchStore = {
loading: false,
needReload: true,
matches: [],
};
还有一些选择器,例如:
export const getAll = createSelector(
matchSelector,
({ matches }: IMatchStore) => unflatMatches(matches),
);
export const isLoading = createSelector(
matchSelector,
({ loading }: IMatchStore) => loading,
);
export const reload = createSelector(
matchSelector,
({ needReload, loading }: IMatchStore) => !loading && needReload,
);
因此,基本上,当needReload === true
时,这意味着我需要重新加载基数(如果列表中不存在match
,则在reducer上检测到该值)。
我的问题是:处理这种情况的正确方法是什么?目前,我正在使用该服务,例如:
this.store.select(reload).pipe(filter(Boolean)).subscribe(() => this.load());
但是我认为可以对其进行改进,并将其包装在某些effect
更新:
我设法创造了一种可以观看ActionTypes.Update
的效果,但效果仍然不理想:p
@Effect()
login$: Observable<Action> = this.actions$.pipe(
ofType(ActionTypes.Update),
withLatestFrom(this.store.select(reload)),
filter(([, needRealod]) => needRealod),
switchMapTo(
forkJoin( /** HTTP stuff */ ).pipe(
map(([a, b]) => new Init(a, b)),
),
),
);
答案 0 :(得分:0)