После обновления NgRx до 6.1.0 с 4 я вижу проблему с Redux DevTools Extension. Он падает каждый раз, когда меняется маршрут.
Я добавил сериализатор
ссылка
что документация рекомендована, но проблема все еще существует
Мне пришлось изменить способ предоставления CustomSerializer в соответствии с этой статьей
ссылка
потому что моя IDE показала ошибку, если я попытался реализовать именно так, как показала документация
Я также пытался использовать без storeFreeze и опускал объект metaReducer внутри StoreModule.forRoot (), но проблема все та же
// reducers/index.ts
import { ActionReducerMap, MetaReducer } from '@ngrx/store';
import { storeFreeze } from 'ngrx-store-freeze';
import { Params, RouterStateSnapshot } from '@angular/router';
import {
routerReducer,
RouterReducerState,
RouterStateSerializer
} from '@ngrx/router-store';
export interface RouterStateUrl {
url: string;
params: Params;
queryParams: Params;
}
@Injectable()
export class CustomSerializer implements RouterStateSerializer<RouterStateUrl> {
serialize(routerState: RouterStateSnapshot): RouterStateUrl {
let route = routerState.root;
while (route.firstChild) {
route = route.firstChild;
}
const {
url,
root: { queryParams }
} = routerState;
const { params } = route;
// Only return an object including the URL, params and query params
// instead of the entire snapshot
return { url, params, queryParams };
}
}
export interface State {
router: RouterReducerState<RouterStateUrl>;
}
export const reducers: ActionReducerMap<State> = {
router: routerReducer
};
export const metaReducers: Array<MetaReducer<State>> = environment.environment !== EnvironmentEnum.PRODUCTION ? [storeFreeze] : [];
// app-routing.module.ts
@NgModule({
imports: [
RouterModule.forRoot(appRoutes,
{ preloadingStrategy: PreloadAllModules })
],
exports: [
RouterModule
]
})
// app.module.ts
import { AppRoutingModule } from './app-routing.module';
import { metaReducers, reducers, State } from './reducers';
@NgModule({
imports: [
//Other imports
AppRoutingModule,
StoreModule.forRoot(reducers, { metaReducers }),
StoreRouterConnectingModule,
StoreDevtoolsModule.instrument(),
EffectsModule.forRoot([sharedEffects.UserEffects])
],
providers: [
{
provide: RouterStateSerializer,
useClass: CustomSerializer
}
]
})