You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React使用Axios实现JWT登录时出现'data'未定义错误如何解决

报错原因&修复方案
  • 直接触发'data' is not defined no-undef报错的原因:你在handleSubmit方法末尾写了return data;,但整个作用域内从未定义过名为data的变量,ESLint检测到未定义变量就抛出了该错误。
  • 隐藏的逻辑错误:axiosInstance.post是异步请求方法,默认返回Promise对象,你没有做异步处理就直接读取response.data,即使删掉未定义的return语句,也会拿到undefined,后续设置请求头、存储token的逻辑都会失效。
具体修复代码

1. 修改Login.js的handleSubmit方法

将方法改为异步逻辑,删除/修正未定义的data变量:

// 方法前加async标识声明为异步方法
async handleSubmit(event) {
    event.preventDefault();
    try {
        // 加await等待请求完成,拿到后端返回的实际响应结果
        const response = await axiosInstance.post('/token/obtain/', {
            username: this.state.username,
            password: this.state.password
        });
        const resData = response.data;
        axiosInstance.defaults.headers['Authorization'] = "Bearer " + resData.access;
        localStorage.setItem('access_token', resData.access);
        localStorage.setItem('refresh_token', resData.refresh);
        // 如果你不需要返回值可以删掉下面的return语句,需要返回就返回已定义的resData
        return resData;
    } catch (error) {
        throw error;
    }
}

2. 可选优化:修正axiosInstance初始化逻辑

你当前的实例初始化逻辑中,若本地没有存储的access_token,Authorization头会被赋值为Bearer null,可能导致后端校验异常,可优化为如下写法:

const axiosInstance = axios.create({
    baseURL: 'http://127.0.0.1:8000/',
    timeout: 5000,
    headers: {
        'Content-Type': 'application/json',
        'accept': 'application/json'
    }
});
// 仅当本地存在token时,才给实例默认添加Authorization头
const accessToken = localStorage.getItem('access_token');
if (accessToken) {
    axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
}

内容的提问来源于stack exchange,提问作者arash daneshgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:39:01