NgRx - reducer 被无限次触发
NgRx - reducer is being triggered for infinite times
我正在尝试通过 NgRx 效果检索本地存储数据。 PATIENT_FETCH
动作被调度以执行效果。但是在 ngOnInit
方法中调用调度方法时会无限调用。
这里是 stackblitz 演示。如果您取消注释给定 link 的 patient.component.ts
中的第 24 行,则会无限次调用 reducer。我可能在 NgRx 实现中遗漏了一些东西。
问题是效果。
@Effect()
patient: Observable<any> = this.actions.pipe(
ofType(PatientActionTypes.PATIENT_FETCH),
tap((action: ActionTemplate<PatientFetch>) => {
const patient: any = this.storageService.get(STORAGE_KEY, {});
return patientActionFactory.create<PatientFetchSuccess>(PatientActionTypes.PATIENT_FETCH_SUCCESS, patient);
})
);
上面不断调度 PATIENT_FETCH
动作,并再次拾取它 - 导致无限循环。通过查看代码,您可能想要 return PATIENT_FETCH_SUCCESS
操作。因此,您必须将 tap
运算符替换为 map
运算符。
我正在尝试通过 NgRx 效果检索本地存储数据。 PATIENT_FETCH
动作被调度以执行效果。但是在 ngOnInit
方法中调用调度方法时会无限调用。
这里是 stackblitz 演示。如果您取消注释给定 link 的 patient.component.ts
中的第 24 行,则会无限次调用 reducer。我可能在 NgRx 实现中遗漏了一些东西。
问题是效果。
@Effect()
patient: Observable<any> = this.actions.pipe(
ofType(PatientActionTypes.PATIENT_FETCH),
tap((action: ActionTemplate<PatientFetch>) => {
const patient: any = this.storageService.get(STORAGE_KEY, {});
return patientActionFactory.create<PatientFetchSuccess>(PatientActionTypes.PATIENT_FETCH_SUCCESS, patient);
})
);
上面不断调度 PATIENT_FETCH
动作,并再次拾取它 - 导致无限循环。通过查看代码,您可能想要 return PATIENT_FETCH_SUCCESS
操作。因此,您必须将 tap
运算符替换为 map
运算符。