React Redux错误未处理的拒绝(TypeError):无法读取未定义的属性“数据”

时间:2018-01-31 07:46:43

标签: javascript reactjs redux axios redux-thunk

我正在使用带有react redux的axios。成功发布后,我收到此错误。这是处理axios和redux错误的正确方法。如果没有,请指导我。我的参考链接axioshow to deal with errorserror handling in axios。如果这个问题显而易见,我道歉。我是初学者。提前谢谢。

export const landingPageValues=(values)=>{
  return dispatch=>{
    return axios.post('http://127.0.0.1:8000/mainData',values)
      .then(res=>{dispatch(mainpageuploadsuccess(res.data))})
      .catch(err=>{dispatch(mainpageuploadfailed(err.response.data.error))})
  }
}
export const mainpageuploadsuccess = (data) =>{
  return {
    type:'MAINPAGE_UPLOAD_SUCCESS',
    mainUploadData:data
  }
}

export const mainpageuploadfailed = (error) =>{
  return {
    type:'MAINPAGE_UPLOAD_FAILED',
    error
  }
}

Reducer

case 'MAINPAGE_UPLOAD_SUCCESS':
  const {mainUploadData} = action;
  return {
    ...state,
    mainUploadData,
    error:false
  };

  case 'MAINPAGE_UPLOAD_FAILED':
  const {error} = action;
  return {
    ...state,
    error,
    mainUploadData:false
  };

4 个答案:

答案 0 :(得分:1)

在axios.post

之前删除了return关键字
export const landingPageValues=(values)=>{
        return dispatch=>{   
              axios.post('http://127.0.0.1:8000/mainData',values)
              .then(res=>{dispatch(mainpageuploadsuccess(res.data))})
              .catch(err=>{dispatch(mainpageuploadfailed(err.response.data.error))}) 
      }
}

答案 1 :(得分:0)

error对象可能不一定包含response密钥(例如:当它是网络错误时)。

所以你需要在处理错误之前添加一个检查。

if (error.response && error.response.data) {
  dispatch(mainpageuploadfailed(err.response.data.error));
}  else {
  handleErrorsElsewhere(error)
}

答案 2 :(得分:0)

你可以试试这个:

case 'MAINPAGE_UPLOAD_SUCCESS':
            const {mainUploadData} = action;
            return {
              error:false,
              ...state,
              mainUploadData
            };

            case 'MAINPAGE_UPLOAD_FAILED':
            const {error} = action;
            return {
              mainUploadData:false,
              ...state,
              error,
            };

希望它对你有所帮助。

答案 3 :(得分:-3)

检查一次服务器响应。我的意思是,如果您使用的是js节点,请检查响应(例如res.send()),然后发送的数据将发送到前端