我正在使用带有Angular和ngrx / store和ngrx / effects的redux风格的状态管理设计。每当我不从效果中返回动作时,我都会收到错误:
Cannot read property 'type' of undefined
我研究了这个问题,发现在榆树架构中有一种叫做“noop”的动作,当你不想用你的效果链接另一个动作时,你可以调用任何东西。在任何地方召唤这种noop行动对我来说都是非常重复的。我想知道这是否是一个不好的做法。有没有理由你不能产生不返回动作的效果?效果的意图总是有1个动作引发另一个动作吗?我想知道我是否误解了如何使用效果。
谢谢!
答案 0 :(得分:19)
默认情况下,ngrx / effect会调度一个动作。
如果您希望效果“即发即忘”,您需要做的就是将{dispatch: false}
作为参数添加到@Effects()
装饰器。
装饰有
@Effect()
装饰器的Observable应该是要调度的动作流。将{ dispatch: false }
传递给装饰器以防止调度操作。用法:
class MyEffects {
constructor(private actions$: Actions) { }
@Effect({ dispatch: false }) logActions$ = this.actions$
.do(action => {
console.log(action);
});
}
在幕后,这是通过ignoreElements
operator实现的。 (Here是ngrx / effects的源代码,如果你感兴趣的话)。
每次效果运行时,ignoreElements
都会built in noop function获得called。
简而言之,ngrx / effects中不需要明确的noop-action。我不会直接称之为“不良做法”。发送noop-action,但在使用ngrx时肯定没有必要。