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

时间:2017-10-25 14:03:16

标签: ngrx ngrx-store ngrx-effects

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

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

但这不是我想要的: 我不想从有效载荷中保留原始对象, 但是我的reducer逻辑改变了对象 (实际上是结果状态)。

我见过的每个例子都是非常基本的,因此数据可以按原样持久保存。

我可以将这个逻辑放在我的控制器中,但我不认为它是实现这一目标的redux方法。

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

1 个答案:

答案 0 :(得分:2)

您可以使用.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

由于效果是由操作调度触发的,因此您将收到的状态将是结果状态(由reducer处理UPDATE_OBJ操作返回)。