未捕获的 RangeError:React hooks 获取中超出最大调用堆栈大小
2021-05-07
914
大家好,感谢阅读本文。 我正在尝试访问一个 API,但它返回了一个大数据(包含 6000 个元素的数组),因此我必须等待几秒钟才能呈现页面。此外,我还遇到了最大回调的范围错误。 我是否遗漏了某些内容或 API 有问题?有什么可能的解决方法吗?这是我的代码:
import React, { useState, useEffect } from "react";
export default function SomeName() {
const [archive, setArchive] = useState([]);
const getArchive = async () => {
const response = await fetch("https://anaddress");
const body = JSON.parse(await response.text());
setArchive(body.splice(4))
};
useEffect(() => {
getArchive();
}, []);
return ( <div> Some JSX to render archive </div>)
};
谢谢
2个回答
这主要是因为无限递归而发生的,您使用的效果钩子递归地调用 getArchive,您需要确保当您的存档数组为空时它只被调用一次。您可以在调用 fetch 之前通过检查存档数组长度来存档它,如下所示
import React, { useState, useEffect } from "react";
export default function SomeName() {
const [archive, setArchive] = useState([]);
const getArchive = async () => {
const response = await fetch("https://anaddress");
const body = JSON.parse(await response.text());
setArchive(body.splice(4));
};
useEffect(() => {
if(archive.length ==0){
getArchive();
}
}, []);
return ( <div> Some JSX to render archive </div>)
};
Jatin Parmar
2021-05-07
我能够通过将:
setArchive(body.splice(4));
替换为:
body.splice(4);
setArchive(body);
来解决这个问题。我还注意到我不需要在 useEffect 中输入“[]”。
A Zarqam
2021-05-07