在减速器处理后使用 ngrx 效果保持状态

Persist state using ngrx effect AFTER reducer processing

在我的 Angular/ngrx 应用程序中,我使用 @Effect 管理 indexeddb 中的数据持久性。

  @Effect() updateObj$ = this.actions$
  .ofType(MyActions.UPDATE_OBJ)
  .switchMap( payload => this.storage.set('obj', payload.rawObj));

但这不是我想要的: 我不想保留有效负载中的原始对象, 但是对象被我的 reducer 逻辑转换 (这实际上是结果状态)。

我看到的每个示例都非常基础,因此可以从有效负载中按原样保留数据。

我可以将此逻辑放入我的控制器中,但我认为这不是实现此目的的 redux 方式。

你能告诉我更好的方法吗?

您可以使用 .withLatestFrom 运算符访问最新状态。

@Effect() updateObj$ = this.actions$
    .ofType(MyActions.UPDATE_OBJ)
    .withLatestFrom(this.store$.select(<your-state-selector-goes-here>))
    .switchMap( ([action, state]) => ....);

Official .withLatestFrom docs

Simplified docs

由于效果是由动作调度触发的,您将收到的状态将是结果状态(由处理 UPDATE_OBJ 动作的减速器返回)。