angular - Ngrx 存储值返回为真,但试图访问它给出未定义
问题描述
状态值根据减速器返回真或假,但无法访问它,因为它是未定义的。
这是我的组件代码:
getState : Observable<any>;
isAuthenticated : false;
user = null;
errorMessage = null;
constructor( private store : Store<AppState>) {
this.getState = this.store.select(selectAuthState);
}
ngOnInit(): void {
this.getState.subscribe((state)=>{
this.isAuthenticated = state.isAuthenticated;
this.user = state.user;
this.errorMessage = state.errorMessage;
});
}
state.ts 代码:
export interface AppState{
authState : auth.State;
}
export const reducers = {
auth : auth.reducer
}
export const selectAuthState = createFeatureSelector<AppState>('auth');
减速机代码:
export interface State{
isAUthenticated : boolean;
user : User | null;
errorMessage : string | null;
}
export const initialState : State = {
isAUthenticated : false,
user : null,
errorMessage : null
}
export function reducer (state = initialState, action : All) : State{
switch(action.type){
case AuthActionTypes.LOGIN_SUCCESS : {
return{
...state,
isAUthenticated:true,
user:{
token : action.payload.token,
email : action.payload.email
},
errorMessage : null
};
}
case AuthActionTypes.LOGIN_FAILURE : {
return{
...state, errorMessage : 'Incorrect email and/or password'
};
}
case AuthActionTypes.SIGNUP_SUCCESS :{
return{
isAUthenticated : true,
user:{
token:action.payload.token,
email:action.payload.email
},
errorMessage: null
};
}
case AuthActionTypes.SIGNUP_FAILURE : {
return{
...state,
errorMessage : 'That email is already in use.'
};
}
case AuthActionTypes.LOGOUT : {
return initialState;
}
case AuthActionTypes.RESET :{
return initialState;
}
default : {
return state;
}
}
}
您可以看到返回的 state 值为 true,但 state.isAuthenticated 未定义。我什至在 redux devtools 中查看了 state 值,其中 state 值相应地发生了变化。
解决方案
你有一个错字“isAUthenticated”与“isAuthenticated”
case AuthActionTypes.SIGNUP_SUCCESS :{
return{
isAUthenticated : true,
user:{
token:action.payload.token,
email:action.payload.email
},
errorMessage: null
};
}
您的调试消息也显示了这个错字
推荐阅读
- angular - Angular Dynamic ROuting and Lazy loading
- .net - 服务运行时无法更改服务名称
- node.js - Node.js 需要找不到模块的库
- html - 如何在 Angular 5 中以模态打开 url(网页视图)
- jvm - jProfiler。临时连接错误后无法正常工作
- jquery - 尽管格式良好的 Json(DataTables),但无法在我的表中添加行
- google-bigquery - 如何从具有 DATE 列的 BigQuery 表中导出 AVRO 文件并将其再次加载到 BigQuery
- javascript - 如何检查 WebSocket.server 连接是打开还是关闭?
- python - python tkinter自我错误
- php - laravel Guzzle 发布数据数组