angular - 将 @Effect 转换为 createEffect NGRX
问题描述
我正在将@Effect(显然现在已弃用)转换为createEffect,但是我看到了一些我没有预料到的错误并且不明白为什么。
之前的效果:
@Effect({ dispatch: false })
LoginSuccess: Observable<any> = this.actions.pipe(
ofType(AuthActions.SUCCESSFUL_LOGIN),
tap((user) => {
localStorage.setItem('jwt', user.payload.token);
this.router.navigateByUrl('/');
})
);
新效果:
loginSuccess$ = createEffect(() => {
return this.actions.pipe(
ofType(AuthActions.SUCCESSFUL_LOGIN),
tap((user) => {
localStorage.setItem('jwt', user.payload.token);
this.router.navigateByUrl('/');
})
),
{ dispatch: false }
});
错误:
“从不”类型上不存在属性“有效负载”。
'() => { dispatch: boolean; 类型的参数 }' 不可分配给“() => EffectResult”类型的参数。
任何人都可以指出我明显的错误,我将不胜感激。
解决方案
传入实际actionCreator
返回的createAction
ie ofType
:
export const successfulLoginAction = createAction('[User] Login Succeeded', props<{ token: string }>());
return this.actions.pipe(
ofType(successfulLoginAction),
tap((action) => {
localStorage.setItem('jwt', action.token);
...
如果要使用旧式动作类,则需要将动作类型传递给ofType
:
return this.actions$.pipe(
ofType<LoginSuccess>(AuthActions.SUCCESSFUL_LOGIN),
tap((action) => {
localStorage.setItem('jwt', action.payload.token);
...
);
推荐阅读
- groovy - 如何从 Groovy 中的 trait 实现中获取属性?
- c# - Entity Framework 6 - 更新失败(断开连接的场景)
- django - django模型字段获取id字段的默认值
- php - Smarty 未定义索引变量
- python - 使用相同的 ID,pandas 从多个列表创建多行
- oracle - 如何在 unix 中使用 sqlplus 以很好的方式显示选择查询
- spring - 如何在字符变化列上对spring数据jpa存储库进行排序
- rust - 如何转移所有权或从结构中提取可变引用
- python-3.x - 当数据量很大时,将数据拟合到机器学习 keras 模型中
- php - JSON中的foreach函数只返回一行