angular - NgRx 效果加载两​​次

标签 angular ngrx ngrx-effects

我有一个简单的功能模块,它提供服务并导入自己的统计片段作为功能:

@NgModule({
  imports: [
    CommonModule,
    StoreModule.forFeature('alarms', alarmsReducer, { initialState: alarmsInitialState }),
    EffectsModule.forFeature([AlarmsEffects])
  ],
  declarations: [],
  providers: [
    AlarmsFacade,
    AlarmsService
  ]
})
export class AlarmsModule {
}

我正在将这个模块导入到另外两个模块中,一个需要访问服务的页面,以及 AppModule ,因为我需要在此处导入它以便正确初始化状态.

当我检查 Redux DevTools 时,我可以清楚地看到 @ngrx/store/update-reducers 功能 alarms 被调用了两次。这会导致状态被卡住,停止所有效果(包括与警报功能无关的效果)。

下面的时间线可以显示该问题(在效果初始化后触发第三个 @ngrx/store/update-reducers 操作,而目前只有两个功能,它包含功能 '警报'):

Redux DevTools timeline

如何避免效果被加载两次?我尝试从 AppModule 中删除该模块,但它破坏了警报状态,因为没有为我的选择器提供默认状态。

最佳答案

这是我的问题:

升级到 ngrx 8 后,我没有从已转换为 createEffect 的效果中删除 @Effect() 装饰器。

我从效果中删除了 {dispatch: false} (现在使用 createEffect),而不是将它们作为第二个参数放在箭头函数之后。

另请参阅:Effect gets called twice when using StoreDevtoolsModule.instrument()

关于angular - NgRx 效果加载两​​次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219078/

相关文章:

angular - 使用新的 Ngrx 8 createEffect 模式时多次触发服务方法

javascript - 操作第三次运行时未触发效果

javascript - Angular 8 和完整日历组件

javascript - 来自 Angular2 的 ES6-shim 与 Typescript lib.es6.d.ts 冲突

angular - 如何发送数据(Angular 2)?

angular - NgRx - 在路由器转换期间正在分派(dispatch)多个操作

javascript - 在 API 调用 NgRx Angular 之前检查商店

angular6 - 用于列表和详细数据对象的 NgRx 存储

angular - 使用 ngrx 商店时如何在 Angular 2 中导航

javascript - 在 Meteor Angular2 上安装 D3