Я установил Магазин для своего приложения. После выхода из системы я хочу сбросить хранилище. Но есть проблема.
Предположим, у меня есть следующее состояние:
subjects: {
subjectsLoaded: true
}
В компоненте я подписываюсь на магазин следующим образом:
this.store.pipe(
select(areSubjectsLoaded),
tap((subjectsLoaded) => {
if (!subjectsLoaded) {
this.store.dispatch(loadSubjects());
console.log('Dispatching Subjects because they are not Loaded');
}
}),
filter(subjectsLoaded => subjectsLoaded),
takeUntil(this.unsubscribe$)
).subscribe();
После выхода из системы и перезагрузки хранилища это будет выглядеть так:
subjects: {
subjectsLoaded: false
}
Поскольку я подписан на изменения в компоненте, будет выполнена отправка действий. Но я не знаю, как этого избежать. Так же использую takeUntil
, чтобы не получать данные после уничтожения компонента
Есть небольшая демонстрация:
Для очистки магазина я использую metaReducers:
export const metaReducers: MetaReducer<AppState>[] = [clearState];
export function clearState(reducer: ActionReducer<AppState>): ActionReducer<AppState> {
return (state: AppState, action: Action): AppState => {
if (action.type === '[Toolbar] User Logout') {
console.log('Clear state: ',state);
state = undefined;
}
return reducer(state, action);
};
}