我正在尝试为我的身份验证商店设置SideEffect。每当我触发动作(TrySignIn
)时,我都会收到以下错误:
" AuthEffects.authSignin"发出了无效的行动
错误类型错误:操作必须具有类型属性
我从错误类型的理解是,我的返回操作没有type属性,这不是这里的情况,我将返回两个操作,SIGNIN
和SET_TOKEN
他们有类型属性。
如果有人能告诉我这里做错了什么,我很感激,
我重现了错误here,您将能够看到我在控制台中收到的相同错误。
我发布了实施的相关代码,
我的身份验证
export class TrySignin implements Action {
readonly type = TRY_SIGNIN;
constructor(public payload: Credentials) {}
}
export class Signin implements Action {
readonly type = SIGNIN;
}
export class SetToken implements Action {
readonly type = SET_TOKEN;
constructor(public payload: string) {}
}
我的SideEffect,
@Injectable()
export class AuthEffects {
@Effect()
authSignin = this.actions$
.ofType(AuthActions.TRY_SIGNIN)
.map((action: AuthActions.TrySignin) => {
return action.payload;
}).switchMap(
(authData: Credentials) => {
return (this.httpService.postRequest('/Account/Login', (authData)));
})
.map(
(res) => {
console.log(res['authToken']);
return [
{
type: AuthActions.SIGNIN
},
{
type: AuthActions.SET_TOKEN,
payload: res['authToken']
}
];
}
);
在我的组件中,我解雇了我的行动,
login() {
this.store.dispatch(new authActions.TrySignin(this.loginForm.value));
}
答案 0 :(得分:1)
效果会在分派的操作到达商店之前对其进行修改。看起来您正在修改动作中的动作以将其转换(映射)到
Action
^^这是一个数组。它不符合 return {
type: AuthActions.SIGNIN
}
接口(并且它没有类型属性)。
如果您将其编辑为
mergeMap()
有效吗?
评论中提到:如果您希望自己的行动发送其他操作,请使用@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class BaseGame {
@OneToMany(mappedBy="baseGame")
public List<CardList> decks;
//... lots of other fields
}
。它增加了现有的可观察量,而不是取代它。