当一个动作被派发时做某事
Posted
技术标签:
【中文标题】当一个动作被派发时做某事【英文标题】:Do something when an action has been dispatched 【发布时间】:2019-02-27 01:40:54 【问题描述】:假设我们有一个动作SyncUserData
,它返回监听数据库变化的可观察对象。每当有更改时,该操作都会调度操作new PatchUserData(newData)
。
SyncUserData
操作从状态的ngxsOnInit
调度(仅一次)。
在不同的部分(例如,组件)中,每当操作 PatchUserData
正在调度时,我都想做一些事情。像这样的:
this.store.onDispatch(PatchUserData).subscribe();
我在源代码中查找了一下,但没有找到与我的示例类似的内容。
【问题讨论】:
【参考方案1】:直接订阅状态的另一种方法是使用 NGXS 操作流在特定操作已分派/完成时收到通知,请参阅action handlers 的文档。
来自官方文档:
@Component( ... )
export class CartComponent
constructor(private actions$: Actions)
ngOnInit()
this.actions$.pipe(ofActionSuccessful(CartDelete)).subscribe(() => alert('Item deleted'));
【讨论】:
你是对的。发布此问题后,我使用了这种方法。这似乎更方便。 是的,我现在也使用了很多次 - 特别是如果我想做某事但并不真正关心查看当前状态时 @EliyaCohen 这似乎是对这个问题的回答 我们如何使用它来检查一个动作的完成情况?【参考方案2】:在您的情况下,您不需要订阅某个事件,您可以在您的商店中订阅 userData
并拥有它的最新版本,无论任何操作更改它。根据您的数据模型修改下一个示例并订阅 observable:
import Select from '@ngxs/store';
@Select(( userData : AppState) => userData)
userData$!: Observable<UserData>;
更多选择:https://ngxs.gitbook.io/ngxs/concepts/select
【讨论】:
@Select( userData : AppState) => userData)
是否等于 @Select(state => state.app.userData)
?
不,它等于@Select(state => state.userData)
好的,谢谢,但如果是这样,那你为什么不输入@Select(state => state.userData)
呢?
用什么更适合你,我就是喜欢那种风格以上是关于当一个动作被派发时做某事的主要内容,如果未能解决你的问题,请参考以下文章