ngrx/component-store 状态改变时触发效果

mat*_*ias 8 ngrx-store component-store

我有一个有角度的应用程序@ngrx/component-store

当用户从设备列表中选择一个条目时,我将其存储到component-store

  component.ts:
  onDeviceClicked(device: DeviceTO) {
    this.inspectionStore.setDeviceSelected(device);
  }

  inspectionStore.ts
  readonly setDeviceSelected = (data: DeviceTO) =>  {this.patchState({selectedDevice: data})};
Run Code Online (Sandbox Code Playgroud)

现在,用户已经选择了设备,应该会触发副作用。但是,我不确定当部分状态发生变化时如何触发副作用。

更新状态时需要这样做吗?

  readonly setDeviceSelected = (data: DeviceTO) =>  {
    this.patchState({selectedDevice: data});
    this.tiggerMySideEffect(data);
  };
Run Code Online (Sandbox Code Playgroud)

或者有其他方法可以告诉 sideEffect 监听变化吗?

Mr.*_*ung 6

由于效果是自动订阅的,因此不需要外部触发器(通过显式调用效果)。效果可以直接对状态变化做出反应。所以以下(作为示例)确实有效:

public readonly selectedDevice$ = this.select(({ selectedDevice }) => selectedDevice);

private readonly effectOnSelectedDevice = this.effect(_ => this.selectedDevice$.pipe(switchMap(selectedDevice => this.service.doSideEffect(selectedDevice))));
Run Code Online (Sandbox Code Playgroud)

此处可以使用任何可观察量(例如this.store或与 等的组合combineLatest)。

更进一步,您可以拥有一系列效果(从外部隐藏) - 对先前效果执行的状态更改做出反应以优化数据(对后端进行不同的调用)。

它们都不需要明确的手动触发。