首页 文章

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

提问于
浏览
5

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

Cannot read property 'type' of undefined

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

谢谢!

1 回答

  • 13

    默认情况下,ngrx / effect会调度操作 .

    如果你想要一个效果是'fire-and-forget',你需要做的就是将 {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时肯定没有必要 .

相关问题