我正在观看大约一年前制作的教程,其中创建了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()”,但我似乎无法调整我的代码片段以使其正常工作,如果您可以帮助我根据所做的更改来重建该代码片段,那就太好了。
答案 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
才能过滤特定操作。
我认为您可能必须在其中添加代码。
import { ofType } from 'redux-observable';
希望这会有所帮助