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

React useEffect配置依赖数组后触发无限请求循环问题求助

问题原因

无限循环是依赖项配置错误直接导致的:

  • useEffect 依赖数组中包含了 getSingleClient 这个状态变量
  • 每次useEffect执行时都会调用setGetSingleClient更新该状态,状态更新后又会触发依赖它的useEffect重新运行,形成无限循环、频繁发请求的问题。
解决方案

直接把getSingleClient从依赖数组中移除即可,你的拉取逻辑只需要在路由参数id变化时触发即可,修改后代码如下:

const [getSingleClient, setGetSingleClient] = useState({});
useEffect(() => {
  const GetClient = async () => {
    const clientData = await GetSingle(`${id}`);
    setGetSingleClient(clientData);
  };
  GetClient();
}, [id]);
优化建议
  • 可以增加请求取消逻辑,避免组件卸载后异步请求完成调用setState产生的内存泄漏警告:
const [getSingleClient, setGetSingleClient] = useState({});
useEffect(() => {
  const abortController = new AbortController();
  const GetClient = async () => {
    try {
      const clientData = await GetSingle(`${id}`, {
        signal: abortController.signal
      });
      setGetSingleClient(clientData);
    } catch (err) {
      // 忽略主动取消的请求错误
      if (err.name !== 'AbortError') {
        console.error('拉取客户端数据失败:', err);
      }
    }
  };
  GetClient();
  // 组件卸载/依赖变化时取消未完成的请求
  return () => abortController.abort();
}, [id]);
  • 如果GetSingle是在组件内部定义的函数,需要用useCallback包裹后再加入依赖数组,避免不必要的请求重发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:54:02