使用Ngrx Effects生命周期挂钩OnInitEffects(似乎无限发射)

时间:2019-04-24 00:24:10

标签: ngrx effects

我试图学习有关Ngrx 7中引入的效果生命周期挂钩的知识,但我并不是很了解正在发生的事情。我有一个Angular应用程序,并且在效果类中具有以下内容,但是,可观察到的init $无限发射值。我希望它能够触发一次并完成。我对可观察物也有些陌生。该文档并没有真正帮助我,因为没有太多示例。我可以添加take(1),但我想了解为什么它会永远发出。

@Injectable()
export class AuthEffects implements OnInitEffects{

  constructor(private actions$: Actions) {}

  @Effect({dispatch: false})
  login$ = this.actions$.pipe(
    ofType<LoginAction>(AuthActionTypes.LoginAction),
    tap(console.log)
  );

  @Effect({dispatch: false})
  logout$ = this.actions$.pipe(
    ofType<LogoutAction>(AuthActionTypes.LogoutAction),
    tap(console.log)
  );

  @Effect()
  init$ = this.actions$.pipe(
    ofType<Action>('[Auth] Effects Init'),
    tap(console.log)
  );

  ngrxOnInitEffects(): Action {
    console.log('AuthEffects init\'d');
    return { type: '[Auth] Effects Init'};
  }
}

1 个答案:

答案 0 :(得分:0)

这是预期的行为-效果的主要用法是对某些第三方副作用起作用。并且您设置了ofType<Action>,使其在发生任何 Action 时发出,而对于例如:

  @Effect({dispatch: false})
  login$ = this.actions$.pipe(
    ofType<LoginAction>(AuthActionTypes.LoginAction),
    tap(console.log)
  );

只要 LoginAction 发生,就会发出。