我使用的是ngrx/effects。
如何分派空操作?
这就是我现在所做的:
@Effect() foo$ = this.actions$
.ofType(Actions.FOO)
.withLatestFrom(this.store, (action, state) => ({ action, state }))
.map(({ action, state }) => {
if (state.foo.isCool) {
return { type: Actions.BAR };
} else {
return { type: 'NOT_EXIST' };
}
});
因为我必须返回一个操作,所以我使用return { type: 'NOT_EXIST' };
。
有没有更好的方法?
8条答案
按热度按时间u3r8eeie1#
选择的答案不再适用于rxjs6。因此这里有另一种方法。
虽然我更喜欢过滤大多数情况下所描述的另一个答案,使用flatMap有时可以方便,特别是当你正在做复杂的事情,太复杂的过滤器函数:
xuo3flqw2#
我使用过类似的未知操作,但通常是在reducer的单元测试环境中。
如果您不愿意在效果中执行相同的操作,可以使用
mergeMap
、Observable.of()
和Observable.empty()
有条件地发出一个动作:hivapdat3#
从ngrx 8开始,如果你试图调度一个空的动作,你会得到一个运行时错误,所以我认为只要过滤掉它们,这样它们就不会被调度。
rdrgkggo4#
我会按照以下方式来做:
iugsix8n5#
我寻找的解决方案涉及使用
@Effect({ dispatch: false })
。6jygbczu6#
对于
"rxjs": "~6.6.6"
,flatmap已被合并Map破坏,我们可以使用相同的行为ntjbwcob7#
另一种情况(没有“of”、“Observables”等):
mklgxw1f8#
如果您不想分派动作,则只需将
dispatch
设置为false: