能否请您告诉我调度动作的正确方法是什么?
在组件中,我们喜欢使用store
而不是store.dispatch
。
onLoginButtonClick(user: Authenticate) {
this.store.dispatch(new Authctions.Login(user));
}
现在使用ngEffect
而不使用store
调度动作只使用new Action name
为什么?
export class AuthEffect {
@Effect()
login$ = this.actions$.pipe(
ofType(AuthActionsTypes.LOGIN),
map((action: Login) => action.payload),
switchMap((auth: Authenticate) => {
return this.authService.login(auth).pipe(
map(user => new LoginSuccess({user})),
catchError(error => of(new LoginFailure(error)))
);
})
);
为什么这样使用
new LoginSuccess({user})
我们可以像这样this.store.dispatch( new LoginSuccess({user}))
吗?有效吗?
有任何更新吗?
答案 0 :(得分:3)
效果返回操作,如文档here所述。
Ngrx将在内部调度从您的效果返回的操作。
您可以直接在效果中使用this.store.dispatch( new LoginSuccess({user}))
,但是您不需要,因为它不是必需的,只会使代码混乱!
如果您需要从效果中分派多个动作,可以执行以下操作:
@Effect() save = this.update$.pipe(
map(action => action.payload),
switchMap(payload => this.myService.save(payload)),
switchMap(res => [
new NotificationAction('save success'),
new SaveSuccessAction(res)
])
);