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 监听变化吗?
由于效果是自动订阅的,因此不需要外部触发器(通过显式调用效果)。效果可以直接对状态变化做出反应。所以以下(作为示例)确实有效:
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)。
更进一步,您可以拥有一系列效果(从外部隐藏) - 对先前效果执行的状态更改做出反应以优化数据(对后端进行不同的调用)。
它们都不需要明确的手动触发。
| 归档时间: |
|
| 查看次数: |
4379 次 |
| 最近记录: |