我试图学习有关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'};
}
}
答案 0 :(得分:0)
这是预期的行为-效果的主要用法是对某些第三方副作用起作用。并且您设置了ofType<Action>
,使其在发生任何 Action 时发出,而对于例如:
@Effect({dispatch: false})
login$ = this.actions$.pipe(
ofType<LoginAction>(AuthActionTypes.LoginAction),
tap(console.log)
);
只要 LoginAction 发生,就会发出。