В моем приложении, разработанном в Angular , я использую услуги Аутентификация Firebase для аутентификации, в момент входа в систему моего приложения состояния меняются правильным образом, сохраняя все состояние формы, сколько мне нужно.
При входе в систему я заметил в Redux DevTools , что состояние моего приложения имеет статус аутентификации "auth"
, поэтому я могу получить доступ к данным аутентифицированного пользователя.
Когда я перехожу на любую другую страницу в моей системе, состояние аутентификации "auth"
исчезает после события, которое называется "@ngrx/store/update-reducers"
, и там я больше не могу иметь информацию о состоянии аутентификации в моей системе.
Почему это может происходить? Почему вызывается "@ngrx/store/update-reducers"
? 1017 *
У меня есть файл, который находится в папке "store"
внутри дерева "src/app"
.
В этом файле у меня есть все редукторы, которые я создаю в корневом модуле "app.module"
.
index.ts:
import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';
import { ActivatedRouteSnapshot, RouterStateSnapshot, Params } from '@angular/router';
import * as fromRouter from '@ngrx/router-store';
import * as fromAuth from '../reducers/auth.reducer';
import * as fromMessenger from '../reducers/messenger.reducer';
export interface RouterStateUrl {
url: string;
queryParams: Params;
params: Params;
}
export interface StateApp {
auth: fromAuth.AuthState;
router: fromRouter.RouterReducerState<RouterStateUrl>;
messenger: fromMessenger.MessengerState;
}
export const reducers: ActionReducerMap<StateApp> = {
auth: fromAuth.reducer,
router: fromRouter.routerReducer,
messenger: fromMessenger.reducer
};
export const getMessengerState = createFeatureSelector<fromMessenger.MessengerState>('messenger');
export const getAuthState = createFeatureSelector<fromAuth.AuthState>('auth');
export const getRouterState = createFeatureSelector
<fromRouter.RouterReducerState<RouterStateUrl>>
('router');
export class CustomSerializer
implements fromRouter.RouterStateSerializer<RouterStateUrl> {
serialize(routerState: RouterStateSnapshot): RouterStateUrl {
const { url } = routerState;
const { queryParams } = routerState.root;
let state: ActivatedRouteSnapshot = routerState.root;
while (state.firstChild) {
state = state.firstChild;
}
const { params } = state;
return { url, queryParams, params };
}
}
app.module.ts
import { reducers, CustomSerializer } from './store/reducers';
import { effects } from './store/effects';
StoreModule.forRoot(reducers, { metaReducers }),
EffectsModule.forRoot(effects),
Состояние "messenger"
и остальные поддерживаются, единственное состояние, которое не поддерживается при переходе от одной страницы к другой, - это состояние "auth"
.