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

React中使用Axios发送Get请求时useEffect出现无限循环如何解决?

问题根因

你出现无限循环的核心原因是依赖数组的位置传错了:
你代码里的[]是作为axios.get().then()的第二个参数(对应请求成功的错误回调位置),根本没有传递给useEffect作为第二个参数。
useEffect如果没有传入依赖数组,会在每次组件渲染完成后都执行:你在useEffect内部调用setData修改状态,状态更新触发组件重渲染,重渲染后又再次执行useEffect,就形成了无限循环。

修复步骤
  • 第一步:将空数组[]移动到useEffect回调函数的闭合大括号外侧,作为useEffect的第二个参数。
  • 第二步:优化不必要的变量定义,避免重复生成引用:
    将固定不变的请求前缀queryURL移动到组件外部定义,避免每次组件渲染都重新创建新的字符串引用;
    把仅在useEffect内部使用的country变量移到回调内部定义,避免污染组件顶层作用域。
修复后代码示例
import React, {useEffect, useState} from 'react';
import axios from 'axios';
import { getCookie } from '../utils/util';

// 固定常量移到组件外,仅初始化一次
const queryURL = `https://restcountries.eu/rest/v2/name/`;

const Details = () => {
    const [data, setData] = useState(null);

    // 依赖数组正确传递给useEffect
    useEffect(() => {
        const country = getCookie('title');
        console.log(country);
        axios.get(queryURL + country).then((res) => {
            setData(res.data);
        });
    }, []); 

    return (
        <>
            details
        </>
    )
}

export default Details;
补充说明

如果你的ESLint开启了react-hooks/exhaustive-deps规则,可能会提示你将queryURL、getCookie加入依赖数组,直接添加即可:这两个都是引入的固定值/纯函数,不会发生变化,加入后也不会触发useEffect重复执行。
如果后续需要在country值变化时重新发起请求,可以把country用useState存储后加入依赖数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:06:02