为什么必须ngrx / redux效果返回动作?是否正在使用像榆树这样的不良行为?

时间:2017-05-18 18:29:59

标签: angular redux ngrx ngrx-effects ngrx-store

我正在使用带有Angular和ngrx / store和ngrx / effects的redux风格的状态管理设计。每当我不从效果中返回动作时,我都会收到错误:

Cannot read property 'type' of undefined

我研究了这个问题,发现在榆树架构中有一种叫做“noop”的动作,当你不想用你的效果链接另一个动作时,你可以调用任何东西。在任何地方召唤这种noop行动对我来说都是非常重复的。我想知道这是否是一个不好的做法。有没有理由你不能产生不返回动作的效果?效果的意图总是有1个动作引发另一个动作吗?我想知道我是否误解了如何使用效果。

谢谢!

1 个答案:

答案 0 :(得分:19)

默认情况下,ngrx / effect会调度一个动作。

如果您希望效果“即发即忘”,您需要做的就是将{dispatch: false}作为参数添加到@Effects()装饰器。

来自@ngrx/effects docs

  

装饰有@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时肯定没有必要。