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
相关产品推荐
相关产品推荐

