我的效果无限循环,我不知道为什么。
interface LatestAppointmentsWidgetState {
loading: boolean;
page: number;
pagedData: Paged<Appointment>;
}
@Injectable()
export class LatestAppointmentsWidgetStore extends ComponentStore<LatestAppointmentsWidgetState> {
private readonly params$ = this.select(state => ({
page: state.page
}));
readonly loadBusinesses = this.effect(() => {
return this.params$.pipe(
tap({ next: () => this.patchState({ loading: true }) })
);
});
}
我尝试只保留相关代码。看起来效果中的 patchState 触发了
params$
选择器。但根据我的理解 patchState 应该只更新与作为参数传递的部分状态匹配的状态。有谁知道为什么会发生这种情况?
发生这种情况是因为:
为了防止这种情况,请考虑仅返回布尔值。
private readonly page$ = this.select(state => state.page);
// you can use it to recreate params$
private readonly params$ = this.select(this.page$, page => ({page});
第二个选择是使效果“更智能”并忽略重新发射,例如通过使用
distinct(By)
。