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

React中使用useState存储GET请求响应触发无限循环如何解决?

问题原因
  • 你的useEffect没有传入第二个依赖数组参数,React中未指定依赖的useEffect会在每一次组件渲染完成后都执行。
  • 调用setCompany会更新组件状态,触发组件重新渲染,重渲染后又会执行useEffect调用send()函数,send()里再次调用setCompany触发重渲染,就此形成无限循环。
  • 你不调用setCompany时状态不会更新,组件不会触发重渲染,因此不会出现循环问题,完全匹配你遇到的现象。
解决方案

根据你的业务需求选择对应方案即可:

方案1:仅组件首次挂载时发一次请求

给useEffect添加空依赖数组,空数组代表仅在组件首次挂载完成后执行一次:

useEffect(() => {
  send(); 
}, []);

方案2:id变化时自动重新请求数据

给useEffect的依赖数组添加id变量,只有id发生变化时才会重新执行请求逻辑:

useEffect(() => {
  send(); 
}, [id]);

方案3:仅点击搜索按钮时发请求(更适配你当前的表单逻辑)

你当前写了搜索表单,仅需要用户点击搜索按钮时触发请求的话,直接删除无用的useEffect,把send()调用放到handleSubmit函数中即可:

const handleSubmit = (e) => {
    e.preventDefault();  
    send();
}
额外优化建议

你初始化company状态时默认值是空数组[],如果后端返回的公司数据是对象格式,会存在类型不匹配问题,建议修改初始值为null或者符合CompanyModel类型的默认结构,避免后续渲染时报类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:48:03