我有一个像user-personal-details.component.ts
. user
与存储的保持同步Store
@Select() user$: Observable<IUser>;
user:IUser;
ngOnInit() {
this.user$.subscribe((user:IUser)=>{
this.user = user;
this.form.form.patchValue(user);//LINE A: fill the form using user data
};
}
该组件有一个表单来填写有关user
. 没有保存按钮,每次用户输入任何这些组件时,我都会通过以下方式检测更改
this.form.valueChanges.debounce(2000).subscribe((formData)=>{
this.store.dispatch(new UpdateUser(formData));//Line B
})
并派发一个Action
命名UpdateUser
来存储更改Store
。
问题:
问题是当用户输入一些东西时,它会发送动作来改变商店中的用户(B 行)。由于user
在 store中订阅了组件,因此将再次调用Line A。反过来,修补表单,因此调用Line B。从而使其成为一个循环。
避免这种情况的一种方法是在表单更改时改变状态,因为这不会触发操作,因此不会调用 B 行。但我认为 Redux 不建议这样做。
有人可以提出一种更优雅的方法来处理这个问题吗?
注意:我为此使用 NGXS,但我想它不应该有所作为。
编辑:由于这个问题被否决了,我对这个问题进行了很大的编辑,以使问题最小化。