You need to enable JavaScript to run this app. React使用useEffect搭配axios请求Spring Boot接口触发无限循环怎么解决?
优惠活动
大模型
产品
解决方案
定价
更多

React使用useEffect搭配axios请求Spring Boot接口触发无限循环怎么解决?

问题根因

你写的useEffect没有传入第二个参数(依赖数组),默认会在每次组件渲染完成后都重新执行回调逻辑。回调内调用setCompanies更新状态会触发组件重渲染,重渲染后又会再次执行useEffect发请求,由此形成无限循环,才会出现服务端持续收到请求、控制台无限打印的现象。

修复方案

给useEffect添加空依赖数组[]即可,空依赖数组代表该副作用仅在组件首次挂载完成后执行1次,不会重复触发:

const [filterKeywords, setfilterKeywords] = useState([]);
const [companies, setCompanies] = useState([]);
useEffect(() => {
    axios.get(`/api/users/allCompanies`)
        .then(res => {
            setCompanies(res.data);
        })
}, []); // 新增空依赖数组
补充优化建议
  • 可以给请求增加错误捕获逻辑,避免请求异常时无提示、状态不更新的问题:
useEffect(() => {
    axios.get(`/api/users/allCompanies`)
        .then(res => {
            setCompanies(res.data);
        })
        .catch(err => {
            console.error('拉取公司列表失败:', err);
        })
}, []);
  • 如果后续需要在某个变量更新时重新拉取数据,把对应变量加入依赖数组即可;如果传给子组件的addFilterKeywords等方法是组件内定义的,建议用useCallback包裹,避免触发子组件不必要的重渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 09:36:07