用角度分派动作的正确方法是什么?

时间:2018-08-07 00:59:59

标签: angular ngrx effects ngrx-store ngrx-effects

能否请您告诉我调度动作的正确方法是什么?

在组件中,我们喜欢使用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}))吗?有效吗?

有任何更新吗?

1 个答案:

答案 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)
   ])
);