代码之家  ›  专栏  ›  技术社区  ›  danday74

ngrx发送一个动作是否可能不触发相关的效果?

  •  0
  • danday74  · 技术社区  · 6 年前

    store.dispatch(new MyAction(payload));
    

    我的行动有关联的效果。当我发出行动时,效果会被激发。伟大的!

    store.dispatch(new MyAction(payload), {triggerEffect: false});
    

    或者我需要创建一个与MyAction完全相同的reducers操作的第二个action,而不是附加到第二个action上?如果我能避开的话,我宁愿不走这条路。谢谢

    3 回复  |  直到 6 年前
        1
  •  1
  •   Kim Kern    6 年前

    我不认为有内置的解决方案,但是可以使用payload属性来控制效果的执行:

    将属性添加到动作创建者:

    class MyAction {
      readonly type = MY_ACTION;
      constructor(private payload: {data: any, shouldTriggerEffect: boolean}) {}
    }
    

    过滤效果:

    @Effect()
    myAction$ = this.actions$.pipe(
      ofType(ActionTypes.MY_ACTION),
      filter(action => action.payload.shouldTriggerSideEffect),
      // do your stuff
    );
    
        2
  •  2
  •   spfellers    6 年前

    假设您只想在有效载荷具有特定属性时触发效果。我想做这样的事。

    @Effect() myEffect$ = this.action$
        .ofType('ACTION_TYPE')
        .filter(action => action.payload.triggerSideEffect)
        .map( () => Observable.of({type: "DO_SIDE_EFFECT"}));
    
        3
  •  1
  •   tlt    6 年前

    这取决于你想实现什么。

    现在,根据您尝试的操作,有两个选项:

    1. 如果作为决策基础的动作数据最终通过reducer处于状态,那么可以使用 withLatestFrom 运算符处于有效状态,取最新状态,由于顺序是有保证的(减速机先对操作作出反应,然后对效果作出反应),则可以根据状态作出决定。