找不到Angular Redux ofType

时间:2019-03-20 18:49:53

标签: angular typescript redux firebase-authentication observable

我正在观看大约一年前制作的教程,其中创建了Redux-Firebase-Angular身份验证。 特别是有一个让我感到困惑的功能:

我们从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”将“ typeOf()”更改为“ pipe()”,但我似乎无法调整我的代码片段以使其正常工作,如果您可以帮助我根据所做的更改来重建该代码片段,那就太好了。

2 个答案:

答案 0 :(得分:1)

如果您正在使用这些库的最新版本,则需要从@ngrx/effects引入该运算符,并在pipe运算符中使用它。 SwitchMap也将发生变化,因此您可以从那里返回内部可观测的物体。

Here is an RXJS reference我经常用作字典。

对于代码,它可能大致遵循以下原则:

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();
        }
      });
    )
  ),
);

答案 1 :(得分:0)

根据文档redux-observable,您必须导入ofType才能过滤特定操作。
ofType Operator

我认为您可能必须在其中添加代码。

import { ofType } from 'redux-observable';

希望这会有所帮助