【问题标题】:React - Redux | Unhandled Rejection (TypeError): Cannot read property 'data' of undefined反应 - Redux |未处理的拒绝(TypeError):无法读取未定义的属性“数据”
【发布时间】:2019-03-25 08:09:49
【问题描述】:

一切都很好,直到登录>调度>有效负载:err.response.data。然后报错: 未处理的拒绝(TypeError):无法读取未定义的属性“数据” 我检查了很多来源,但找不到问题所在。 在寄存器中,有效负载:err.response.data 完美运行。但 登录时出现此错误

import axios from "axios";
import setAuthToken from "../utils/setAuthToken";
import jwt_decode from "jwt-decode";

import { GET_ERRORS, SET_CURRENT_USER } from "./types";

// Register User
export const registerUser = (userData, history) => dispatch => {
  axios
    .post("/api/users/register", userData)
    .then(res => history.push("/login"))
    .catch(err =>
      dispatch({
        type: GET_ERRORS,
        payload: err.response.data
      })
    );
};

// Login - Get User Token
export const loginUser = userData => dispatch => {
  axios
    .post("/api/users/login", userData)
    .then(res => {
      // Save to localStorage
      const { token } = res.data;
      // Set token to ls
      localStorage.setItem("jwtToken", token);
      // Set token to Auth header
      setAuthToken(token);
      // Decode token to get user data
      const decoded = jwt_decode(token);
      // Set current user
      dispatch(setCurrentUser(decoded));
    })
    .catch(err =>
      dispatch({
        type: GET_ERRORS,
        payload: err.response.data
      })
    );
};

// Set logged in user
export const setCurrentUser = decoded => {
  return {
    type: SET_CURRENT_USER,
    payload: decoded
  };
};

// Log user out
export const logoutUser = () => dispatch => {
  // Remove token from localStorage
  localStorage.removeItem("jwtToken");
  // Remove auth header for future requests
  setAuthToken(false);
  // Set current user to {} which will set isAuthenticated to false
  dispatch(setCurrentUser({}));
};

【问题讨论】:

  • 您是否尝试过在调度之前放置一个 console.log 并查看错误?
  • 嗨@MarcelT。 ,我试过console.log。它说未定义。但它不能走正确的路:“/dashboard”。

标签: javascript reactjs redux react-redux


【解决方案1】:

看起来不错,不过我会试试这个:

  1. 每当您的服务器启动错误时,请确保您发出此对象:

    response.json({response: {data: "Error..."}})

  2. 否则检查loginUser函数中未定义的对象:

    payload: ((err||{}).response||{}).data || 'Error unexpected'

    这将在您有未定义的值之前检查您的嵌套对象。

    Oliver Steele Blog 挑选的解决方案

【讨论】:

  • 嗨,对象未定义。我试过你的 2. 代码。并且开发服务器没有启动。 React 会不会有问题?
  • 嗨,我认为您的反应可能还有另一个问题,这就是您无法启动服务器的原因。如果有错误,请在此处发布!
  • 哇!我修复它。我重试您的 2. 代码。说:警告:失败的道具类型:提供给Loginstring类型的无效道具errors,预期object。在登录(由 Connect(Login) 创建)在 Connect(Login)(由 Route 创建)在 Route(在 App.js:28)在 div(在 App.js:23)在 Router(由 BrowserRouter 创建)在 BrowserRouter(在 App.js:22) 在 Provider (在 App.js:21) 在 App (在 src/index.js:7)
  • 恭喜!但我不知道您期望一个对象而不是文本作为“意外错误”。没关系:)
猜你喜欢
  • 2020-06-01
  • 2020-11-27
  • 2020-04-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多