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

React点击按钮刷新react-table数据出现无限循环如何处理?

问题根因

你触发无限重渲染的核心问题出在按钮的onClick配置上:你直接传入了setRefreshData(!RefreshData)的执行结果,而非点击时才触发的回调函数。
组件每次渲染都会立即执行setRefreshData修改refreshData状态,而refreshData是useEffect的依赖项,状态变更会触发useEffect执行、进而触发组件重渲染,最终形成无限循环。
另外你的代码还存在大小写错误:定义的state变量是refreshData,但你在按钮逻辑中写的是RefreshData,大小写不匹配会导致取值错误。

正确实现代码

方案1:保留现有refreshData状态的修正写法

首先修正按钮的onClick逻辑,用箭头函数包裹更新逻辑,点击时才执行,同时使用state函数式更新写法避免闭包旧值问题:

<button
  className="button"
  type="button"
  onClick={() => setRefreshData(prev => !prev)}
>
  Refresh
</button>

方案2:更简洁的无额外状态写法

你其实不需要额外定义refreshData状态,直接在点击按钮时调用getData即可,代码更精简:
逻辑部分代码:

const [data, setData] = useState([]);
const [loadingData, setLoadingData] = useState(true);

const getData = async ()=>{
  setLoadingData(true); // 刷新时可重新开启加载态,优化用户体验
  const response = await axios.get('http://localhost:5000/in-data')
  setData(response.data)
  setLoadingData(false);
}

// 仅在组件首次挂载时执行一次初始化加载
useEffect(()=>{
  getData()
},[])

按钮代码:

<button
  className="button"
  type="button"
  onClick={getData}
>
  Refresh
</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:45:03