![](/img/trans.png)
[英]too many re-renders. react limits the number of renders to prevent an infinite loop. UseEffect
[英]Error: Too many re-renders. React limits the number of renders to prevent an infinite loop. Inside useEffect
从 API 获取数据后,在挂钩中设置数据时出现太多重新渲染错误。 在线 setCustomData(formData);
起初我认为这是因为重新渲染和 useEffect 被多次调用,但我为此包含了空数组,以便 useEffect 只渲染一次。
所以我不确定这里出了什么问题。 我将衷心感谢您的帮助。
const [numOfApplications, setNumOfApplications] = useState(0);
const [customData, setCustomData] = useState();
React.useEffect(() => {
if (props.user.attributes["custom:role"] !== "Parent") {
const campusId = props.user.attributes["custom:campusId"];
const orgId = props.user.attributes["custom:orgId"];
fetchCampusDetails(orgId, campusId)
.then((res) => {
console.log("result for campus details");
console.log(res.data.customData);
const formData = JSON.parse(res.data.customData.formData);
setCustomData(formData);
getAllCampusAnalytics(campusId)
.then((result) => {
const data = result.data.classes.all;
const numOfApps = data.total - data.Draft;
setNumOfApplications(numOfApps);
})
.catch((err) => {
console.log(err);
});
})
.catch((err) => {
console.log(err);
});
}
if (props.user.attributes["custom:role"] === "Parent") {
if (!localStorage.getItem("orgList"))
getAllCampus().then((res: any) => {
console.log(res);
res.data.map(async (menu: any) => {
const name = menu.orgName.replace(/\s/g, "_");
const formDataUrl = JSON.parse(
menu.campusList[0].customData.formData
);
const formData = await schoolForm(name, formDataUrl);
if (cookie.type) {
localStorage.setItem("type", cookie.type);
} else localStorage.setItem("type", "1");
});
setOrganisationList(res.data);
localStorage.setItem("orgList", JSON.stringify(res.data));
if (
cookie.school &&
res.data.filter((org: any) => {
if (org.orgName === cookie.school.replace(/_/g, " ")) return org;
else return null;
}).length === 0
)
removeCookie("school", {path: "/"});
});
}
}, []);
首先,您应该将 api 调用移动到它们自己的 function 中,然后从 useEffect 中调用 function。
它重新渲染的原因可能与父级有关。 如果父母重新渲染,孩子也会重新渲染,除非你使用备忘录或类似的东西。 没有看到父代码很难说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.