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

React中useEffect调用Axios接口首次加载无法获取返回值问题求助

问题根因

React useEffect 不允许直接传入 async 异步函数作为回调参数。useEffect 要求回调函数的返回值只能是清理函数或者 undefined,但 async 函数默认返回 Promise 实例,不符合入参规则,会导致首次渲染时异步请求的时序异常,这就是你刷新页面报错、热更新后临时正常的核心原因——热更新属于增量更新,不会触发完整的 useEffect 初始化校验,所以不会触发该异常。

修复代码

修改 /src/App.js 中的 useEffect 写法,将异步逻辑封装到内部的独立函数中调用即可:

useEffect(() => {
  // 异步逻辑放在内部定义的async函数里执行
  const getPokemonList = async () => {
    const res = await service.apiPokemon.fetchAll();
    console.log(res.data.next);
  };
  getPokemonList();
}, []);

额外优化

你封装的 fetchAll 方法在 catch 分支仅打印错误没有返回值,一旦接口请求失败,上层拿到的 res 就是 undefined,调用 res.data 会直接抛出报错,可以补充兜底逻辑:

import axios from 'axios';
const URL = 'https://pokeapi.co/api/v2/pokemon';

export const fetchAll = async () => {
    try {
        const res = await axios.get(URL);
        console.log(res.data.next);
        return res;
    } catch (error) {
        console.log(error);
        // 补充兜底返回,也可以选择抛出错误让上层捕获处理
        return { data: {} };
    };
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:45:05