Угловой Redux ofType не найден - PullRequest
0 голосов
/ 20 марта 2019

Я смотрел Учебное пособие, которое было сделано около года назад, где создается Redux-Firebase-Angular Authentication. В частности, меня смущает одна функция:

Мы импортируем Actions из @ngrx/effects и еще кое-что и записываем следующий код в user.effects.ts:

@Injectable()
export class UserEffects {
  constructor(private actions: Actions, private angularFireAuth: AngularFireAuth) {}

  @Effect()
  getUser: Observable<Action> = this.actions.ofType(userActions.GET_USER)
    .map((action: userActions.GetUser) => action.payload)
    .switchMap(payload => this.angularFireAuth.authState)
    .delay(2000) // just to show some loading stuff
    .map( authData => {
      if (authData) {
        // User is logged in
        const user = new User(authData.uid, authData.displayName);
        return new userActions.Authenticated(user);
      }
    });
}

Кажется, все работает, кроме функции ofType (), которая, похоже, не найдена.

Я пару раз просматривал видео и самостоятельно искал обновления или устаревшие версии, но ничего не нашел.

Учебник, о котором я говорил (создан Fireship): https://www.youtube.com/watch?v=wOLF-3wNQh8

К сожалению, он вообще ничего не говорит о .ofType (), поэтому я даже не понимаю, что это такое и как я могу его заменить. Любая помощь приветствуется.

Редактировать: Итак, я добавил импорт import 'rxjs/add/observable/ofType';, который не помог, а также импортировал import { ofType } from 'redux-observable';, который не помогает.

Это приводит к вопросу, можете ли вы вместо этого помочь мне найти обходной путь для этого фрагмента, так как я до сих пор не совсем понимаю, что это должно делать.

Редактировать: я нашел руководство по переходу на Redux-Observable: https://redux -observable.js.org / MIGRATION.html , где есть изменение, сделанное из 'typeOf ()' в 'pipe ( ) 'с внутренним' typeOf ', но мне кажется, что я не могу настроить свой фрагмент кода, чтобы он работал, было бы замечательно, если бы вы могли помочь мне перестроить этот фрагмент кода в соответствии с внесенными изменениями.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Если вы используете современные версии этих библиотек, вам нужно вывести этот оператор из @ngrx/effects и использовать его в операторе pipe. SwitchMap также изменится, и вы сможете вернуть оттуда внутреннюю наблюдаемую.

Вот ссылка на RXJS Я часто использую в качестве словаря.

Что касается кода, он может выглядеть примерно так:

this.actions.pipe(
  ofType<GET_USER>(userActions.GET_USER),
  map((action: userActions.GetUser) => action.payload),
  switchMap(payload =>
    this.angularFireAuth.authState.pipe(
      delay(2000), // just to show some loading stuff
      map( authData => {
        if (authData) {
          // User is logged in
          const user = new User(authData.uid, authData.displayName);
          return new userActions.Authenticated(user);
        } else {
          return new userActions.NotAuthenticated();
        }
      });
    )
  ),
);

0 голосов
/ 20 марта 2019

В соответствии с документацией наблюдаемый при редуксе , вам необходимо импортировать ofType для фильтрации определенных действий.
ofType Operator

Я предполагаю, что этоВы, вероятно, должны добавить свой код в.

import { ofType } from 'redux-observable';

Надеюсь, это поможет

...