как правильно отправить действие в angular?

не могли бы вы сказать мне, как правильно отправить действие.

В компоненте мы делаем так, используя 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})) ? в результате ?

любое обновление?


person user944513    schedule 07.08.2018    source источник


Ответы (1)


Эффекты возвращают действия, как указано в документации здесь.

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)
   ])
);
person Wannes Van Dorpe    schedule 07.08.2018