Javascript React和Redux:有效负载未出现在减速器状态对象中

Javascript React和Redux:有效负载未出现在减速器状态对象中,javascript,reactjs,redux,react-redux,axios,Javascript,Reactjs,Redux,React Redux,Axios,在下面的reducer文件中,当用户登录时,状态将使用来自actions文件的有效负载进行更新。在我的状态中,我有一个用户对象,我想在其中存储有效负载。然而,在我的redux开发工具中,我注意到负载出现在用户对象之外,而不是在用户对象之内,结果用户对象显示为默认值null。不知道我做错了什么 //登录减速器填充 const initialState = { token: localStorage.getItem('token'), isAuthenticated: false, is

在下面的reducer文件中,当用户登录时,状态将使用来自actions文件的有效负载进行更新。在我的状态中,我有一个用户对象,我想在其中存储有效负载。然而,在我的redux开发工具中,我注意到负载出现在用户对象之外,而不是在用户对象之内,结果用户对象显示为默认值null。不知道我做错了什么

//登录减速器填充

const initialState = {
  token: localStorage.getItem('token'),
  isAuthenticated: false,
  isLoading: false,
  user: null
};

export default function(state = initialState, action){
  switch(action.type){
    case LOGIN_SUCCESS:
    localStorage.setItem('token', action.payload.token);
    return{
      ...state,
      ...action.payload,
      isAuthenticated: true,
      isLoading: false
    };
    default:
      return state;
  }
}
//登录操作文件

export const login = ({email, password, history}) => dispatch =>{
  const config = {
    headers:{
      "Content-Type": "application/json"
    }
  };

 
  const body = JSON.stringify({email, password});
  axios.post('/api/user/login/', body, config)
    .then(res => {
      console.log(res.data)
      dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
    })
    history.push('/dashboard')
  })
    .catch(err =>{
      dispatch(returnErrors(err.response.data, err.response.status, 'LOGIN_FAIL'));
      dispatch({
        type: LOGIN_FAIL
      });
    });
};

您需要将LOGIN_SUCCESS case块中的reducer返回方法更改为此方法

return {
  ...state,
  user:action.payload,
  isAuthenticated: true,
  isLoading: false
};

您需要将LOGIN_SUCCESS case块中的reducer返回方法更改为此方法

return {
  ...state,
  user:action.payload,
  isAuthenticated: true,
  isLoading: false
};

行动是什么?我的水晶球坏了,因此无法查看已调度操作中的
res.data
是什么。令牌、用户id、名称、电子邮件和图像。我希望将令牌分配给令牌对象,并将剩余的有效负载分配给用户对象;返回{…状态、令牌、用户、其他内容}Yes!哇,我不敢相信我没有想到你提到的那种方法。我花了好几个小时想弄明白。非常感谢你!如果我像这样返回token和user也可以:token:token,user:userWhat是调度的操作?我的水晶球坏了,因此无法查看已调度操作中的
res.data
是什么。令牌、用户id、名称、电子邮件和图像。我希望将令牌分配给令牌对象,并将剩余的有效负载分配给用户对象;返回{…状态、令牌、用户、其他内容}Yes!哇,我不敢相信我没有想到你提到的那种方法。我花了好几个小时想弄明白。非常感谢你!同样,如果我像这样返回token和user也可以:token:token,user:userI已经尝试过了,问题是,尽管有效负载根据需要分配给user对象,但我的token对象仍然为null。令牌没有像在…action.payloads中那样分配到令牌对象中,然后您必须像这样分配操作中的令牌({type:LOGIN_SUCCESS,payloads:{token:7845,user:{what ever value in user's object}}}}),然后您的spread操作符按照您的意愿工作感谢Ali Raza。上面提到的HMR方法正是我想要的。谢谢你花时间回复。我已经试过了,问题是,虽然有效负载按需要分配给用户对象,但我的令牌对象仍然为null。令牌没有像在…action.payloads中那样分配到令牌对象中,然后您必须像这样分配操作中的令牌({type:LOGIN_SUCCESS,payloads:{token:7845,user:{what ever value in user's object}}}}),然后您的spread操作符按照您的意愿工作感谢Ali Raza。上面提到的HMR方法正是我想要的。谢谢你花时间回复。