首页 > 解决方案 > 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 值相应地发生了变化。

调试

标签: angulartypescriptngrx-store

解决方案


你有一个错字“isAUthenticated”与“isAuthenticated”

      case AuthActionTypes.SIGNUP_SUCCESS :{
            return{
                isAUthenticated : true,
                user:{
                    token:action.payload.token,
                    email:action.payload.email
                },
                errorMessage: null
            };
        }

您的调试消息也显示了这个错字


推荐阅读