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

React组件中Axios GET请求函数被反复调用问题咨询

问题原因

这是React组件的常见问题,请求重复触发一般是以下几个原因导致:

  • 你直接在组件顶层调用了getNextCustID,组件每次渲染都会重新执行函数触发请求
  • 你把getNextCustID放在了useEffect的依赖数组里,但没有用useCallback包裹该函数,每次组件渲染都会生成新的getNextCustID实例,触发useEffect重复执行
  • React 18+开发环境的严格模式会让组件两次挂载,也会导致请求多触发一次

解决方案

1. 仅需组件加载时拉取一次数据的场景

直接把请求逻辑放到空依赖的useEffect里,保证仅在组件首次挂载时执行一次:

import { useState, useEffect } from 'react'
import Axios from 'axios'

function Customer() {
    var nextCustID = 0
    const [nextCustIDList, setNextCustIDList] = useState([]) 

    useEffect(() => {
        Axios.get("http://localhost:3001/api/getNextCustID").then(response => {
          setNextCustIDList(response.data);
        })
    }, []) // 空依赖数组限制执行时机
}

2. 需要手动触发请求的场景

如果你需要点击按钮等场景主动调用接口,用useCallback包裹函数,避免重复生成新的函数实例:

import { useState, useCallback } from 'react'
import Axios from 'axios'

function Customer() {
    var nextCustID = 0
    const [nextCustIDList, setNextCustIDList] = useState([]) 

    const getNextCustID = useCallback(() => {
        Axios.get("http://localhost:3001/api/getNextCustID").then(response => {
          setNextCustIDList(response.data);
        })
    }, []) // 空依赖保证函数实例仅生成一次

    return <button onClick={getNextCustID}>获取最新客户ID</button>
}

3. 开发环境严格模式重复请求处理

如果是React 18+开发环境严格模式导致的两次请求,属于框架自带的调试行为,生产环境打包后会自动消失,不需要额外处理。如果需要开发环境也避免,可以临时去掉入口文件里的<StrictMode>包裹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:01