dan*_*y74 5 redux-devtools ngrx angular
我们的 ngrx Angular 应用程序运行良好,直到我们卸载 Redux Devtools,此时我们会收到错误:
您在需要流的地方提供了无效的对象。您可以提供 Observable、Promise、Array 或 Iterable。
app.module.ts 中的商店设置如下所示:
StoreModule.forRoot(reducers, {metaReducers}),
!environment.production ? StoreDevtoolsModule.instrument() : [],
EffectsModule.forRoot([SimsEffects, FiltersEffects, OmnipresentEffects, UserEffects, InitEffects]),
StoreRouterConnectingModule.forRoot({stateKey: 'router'})
Run Code Online (Sandbox Code Playgroud)
我们的 ngrx reducers/index.ts 文件如下所示:
export interface AppState {
router: any,
omnipresent: OmnipresentState,
user: UserState
}
export const reducers: ActionReducerMap<AppState> = {
router: routerReducer,
omnipresent: omnipresentReducer,
user: userReducer
}
export function resetStore(reducer) {
return (state, action) => {
return reducer(action.type === InitActionTypes.ResetStore ? undefined : state, action)
}
}
// storeFreeze throws an error early if state is mutated, avoiding hard to debug state mutation issues
export const metaReducers: MetaReducer<AppState>[] = !environment.production ? [resetStore, storeFreeze] : [resetStore] // tslint:disable-line array-type
Run Code Online (Sandbox Code Playgroud)
有人以前经历过这个或者知道解决方法吗?该问题在开发环境和生产环境中都存在。
我们正在运行 Node v8.11.3
编辑:如果我注释掉这一行,错误就会消失,但显然商店无法初始化:
@Effect()
init$: Observable<any> = defer(() => {
return of(new InitAction())
})
Run Code Online (Sandbox Code Playgroud)
其中 InitAction 只是一个不执行任何操作且不附加任何效果的操作(为了帮助调试此操作)。
就我而言,问题是https://github.com/angular/angular/issues/25837
在没有安装 NGRX 开发工具的情况下,不知道为什么,某些部分的导航被认为位于 NgZone 之外(这实际上是因为由某些 Google SDK 回调调用)。如果 devtools 安装正确,则不会发生这种情况。
问题是控制台中没有出现错误,必须启用详细日志才能看到警告。通过在 NgZone.run 内部包装调用来解决:
constructor(private ngZone: NgZone) {}
this.ngZone.run(() => this.store.dispatch(buildAuthStartAction(user)));