gpt4 book ai didi

angular - 除非安装了 Redux Devtools,否则 ngrx Angular 应用程序无法运行

转载 作者:太空狗 更新时间:2023-10-29 18:28:50 25 4
gpt4 key购买 nike

我们的 ngrx Angular 应用程序运行良好,直到我们卸载 Redux Devtools 时出现错误:

You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

商店设置在 app.module.ts 中如下所示:

StoreModule.forRoot(reducers, {metaReducers}),
!environment.production ? StoreDevtoolsModule.instrument() : [],
EffectsModule.forRoot([SimsEffects, FiltersEffects, OmnipresentEffects, UserEffects, InitEffects]),
StoreRouterConnectingModule.forRoot({stateKey: 'router'})

我们的 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

有没有人以前遇到过这种情况或知道解决方法?该问题同时存在于开发环境和生产环境中。

我们正在运行 Node v8.11.3

编辑:如果我注释掉这一行,错误就会消失,但显然商店无法初始化:

@Effect()
init$: Observable<any> = defer(() => {
return of(new InitAction())
})

InitAction 只是一个不执行任何操作且不附加任何效果的操作(为了帮助调试)。

最佳答案

在我的例子中,问题是 https://github.com/angular/angular/issues/25837

在没有安装 NGRX devtools 的情况下,不知道为什么,某些部分的导航被认为是在 NgZone 之外(这实际上是因为被一些 Google SDK 回调调用)。如果正确安装了 devtools,则不会发生这种情况。

问题是控制台中没有出现错误,必须启用详细日志才能看到警告。通过将调用包装在 NgZone.run 中解决:

构造函数(私有(private) ngZone:NgZone){}

this.ngZone.run(() => this.store.dispatch(buildAuthStartAction(user)));

关于angular - 除非安装了 Redux Devtools,否则 ngrx Angular 应用程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51946287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com