@ngx/store/update-reducers 不合需要地修改了我的应用程序的状态

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"状态。

tim*_*ver 2

@ngrx/store/update-reducers在模块注册的地方调度。如果没有看到完整的代码,这很难“解决”,请确保不要直接更新存储状态(ngrx-store-freeze元还原器可以帮助)并且每个还原器都返回状态(确保有一个默认值)减速器的 switch 语句中的 case 只返回状态..