Lui*_*uiz 7 firebase firebase-authentication redux ngrx angular
在我用Angular开发的应用程序中,我使用Firebase Authentication服务进行身份验证,在我的应用程序登录时,状态以正确的方式更改,根据我的需要保持表单的所有状态。
当我登录时,我在Redux DevTools中注意到我的应用程序的"auth"状态具有身份验证状态,因此我可以从经过身份验证的用户访问数据。
当我导航到系统上的任何其他页面时,"auth"身份验证状态在发生调用的事件后消失,"@ngrx/store/update-reducers"并且我的系统上不再有身份验证状态信息。
为什么会发生这种情况?为什么会"@ngrx/store/update-reducers"被调用?
我有一个"store"位于"src/app"树内文件夹中的文件。在这个文件中,我有我在根模块中创建的所有减速器"app.module"。
索引.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 };
}
}
Run Code Online (Sandbox Code Playgroud)
app.module.ts
import { reducers, CustomSerializer } from './store/reducers';
import { effects } from './store/effects';
StoreModule.forRoot(reducers, { metaReducers }),
EffectsModule.forRoot(effects),
Run Code Online (Sandbox Code Playgroud)
该"messenger"州和其他人保持,当我从一个页面浏览到其他未保持唯一的状态是"auth"状态。
@ngrx/store/update-reducers在模块注册的地方调度。如果没有看到完整的代码,这很难“解决”,请确保不要直接更新存储状态(ngrx-store-freeze元还原器可以帮助)并且每个还原器都返回状态(确保有一个默认值)减速器的 switch 语句中的 case 只返回状态..
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |