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

React中useEffect依赖products导致axios请求无限循环问题求助

问题根因

你当前遇到的无限循环完全是因为useEffect依赖项配置错误导致的:

  • 你将products状态加入了useEffect的依赖数组,而该useEffect内部又会调用setProducts更新products状态
  • 只要products发生变化(包括接口返回赋值、排序操作修改数组引用),就会触发这个依赖products的useEffect重新执行,再次发起请求、更新状态,最终形成死循环

修复方案

如果你确实需要这个请求仅在组件初始化时执行一次,直接将useEffect的依赖数组改为空数组[]即可,修改后的代码如下:

const [products, setProducts] = useState([]);

useEffect(() => {
    const getProducts = async () => {
      try {
        const response = await axios.get('/getAllProducts');
        setProducts(response.data);
        // 注意:这里不能直接打印products拿最新值,React状态更新是异步的,要查看最新值可以打印response.data
      } catch (e) {
        console.log(e);
      }
    };
    getProducts();
}, []); // 空依赖代表仅组件首次挂载完成后执行一次

额外说明

如果后续你需要在排序规则变更时重新拉取接口数据,不要把products放到依赖数组中,改为将排序相关的状态(比如排序类型sortType、排序方向sortOrder等)加入依赖数组即可,不会触发死循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:05