reactjs - useEffect 导致无限循环
问题描述
我在反应钩子和效果方面有点新,我在使用 useEffect 时遇到了麻烦
useEffect( _ => {
(async _ => {
const res = await axios.get('/api/laf/getreportlostitem');
getReports(res.data);
setLoading(false);
})();},[reports]);
上面的代码是我构建的一个useEffect,使用axios获取数据库中的所有数据,我把所有的数据都放在了一个叫做reports的状态中。
// Data State for getting the reports
const [reports, getReports] = useState([]);
但是当我 console.log 报告时,它会导致无限循环。我不知道为什么?
让我向您展示我所做的简要操作。
我正在做一个按钮,当它被点击时,它的 id 报告的状态将被更新。
<Button onClick={ _ => setAsFound(row.id)} variant="contained" color="primary">Set as found</Button>
|
<ClaimedButton onClick={ _ => setAsClaimed(row.id)} variant="contained" color="primary">
Set as claimed
</ClaimedButton>
这是该州报告结构的样本草稿。
{ name, src, yr, campus, department, course, details, contact, status }
如您所见,对象中有一个“状态”数据。因此,当我单击其中一个按钮时,报告状态中的数据将被更新。这是按钮的onclick功能。
const setAsFound = id => {
if(window.confirm("Are you sure this report item is now found?") ){
const updateStatusFound = {
status: foundData
};
props.setReportToFound(id, updateStatusFound);
}
};
const setAsClaimed = id => {
if(window.confirm("Are you sure this report item is now claimed?")){
const updateStatusClaimed = {
status: claimedData
};
props.setReportToClaimed(id, updateStatusClaimed);
}
};
founData 和claimData 值是这样的。
const [foundData, setFoundData] = useState('Found, Not Claimed');
const [claimedData, setClaimedData] = useState('Found and Claimed');
这只是操作完成后将在数据库中发送的状态值。
其他代码只是我正在处理的操作和功能。但我主要关心的是为什么即使是刚刚在组件中呈现的数据,报告状态也会导致无限循环?我什至有一个依赖项,因此当数据更新时,报告状态将被更新并重新呈现数据。我试过不将报告作为依赖项包括在内。但问题是当我删除它时,数据不会更新。有什么想法可以阻止无限循环吗?
解决方案
您将报告作为依赖项传递给 useEffect 挂钩,这意味着每次状态变量报告更改时,都会再次触发 useEffect。如果您想模拟 componentDidMount 并仅查询一次数据,则无需将任何依赖项传递给 useEffect。
推荐阅读
- c# - 更改密码后如何使令牌无效
- scala - 创建数据框时出现scala spark转换错误
- excel - Excel 高级搜索/交叉匹配名称
- mathematical-optimization - 如何更新目标函数中的对偶变量以影响决策?
- vue.js - 如何从 Vue 组件的类中触发组件特定事件?
- content-security-policy - 未检测到 CSP 标头
- node.js - 如何使用条件表达式在 dynamo db 中编写查询
- php - 转换为 php 多维数组后如何循环遍历 json 对象?
- reactjs - 尝试在 React-Native 中使用 MOBX
- c# - PrincipalPermission.Demand() 检查哪个委托人?