我使用的是一个redux风格的状态管理设计,带有Angular、ngrx/store和ngrx/effects。每当我没有从一个效果返回一个动作时,我就会得到一个错误:
Cannot read property 'type' of undefined
我研究了这个问题,发现在一个elm架构中有一个叫做“noop”的动作,当你不想用你的效果链接另一个动作时,它不做任何事情。在我看来,到处调用这个noop动作似乎是非常重复的。我想知道这是否是一个不好的做法。有什么理由你不能有一个不返回动作的效果吗?效果的目的是让一个动作激发另一个动作吗?我想知道我是否误解了如何使用效果。
谢谢你!
1条答案
按热度按时间izkcnapc1#
默认情况下,ngrx/effect会调度一个操作。
如果你想要一个效果是“发射后忘记”的,你所需要做的就是把
{dispatch: false}
作为一个参数添加到@Effects()
装饰器中。从@ngrx/effects文档中:
用
@Effect()
装饰器装饰的可观察对象应该是要调度的操作流。将{ dispatch: false }
传递给装饰器以防止操作被调度。用法:
在幕后,这是通过
ignoreElements
operator实现的。(如果你感兴趣,这里是ngrx/effects的源代码)。ignoreElements
有一个内置的noop函数,每次运行效果时都会调用这个函数。简而言之,在ngrx/effects中不需要显式的noop-action。我不会直接称分派noop-action为“坏习惯”,但在使用ngrx时肯定是不必要的。