javascript - 函数组件不断地重新渲染
问题描述
我的反应函数组件不断地重新渲染自己,直到浏览器崩溃。
我能找到的唯一解决方案是在 useEffect() 末尾使用我的常量输入 []。
function getNestedObject(nestedObj, pathArr) {
return pathArr.reduce(
(obj, key) => (obj && obj[key] !== "undefined" ? obj[key] : undefined),
nestedObj
);
}
function Genres() {
const [genreList, setgenreList] = useState(0);
useEffect(() => {
let results = "";
axios({
url: "https://api.themoviedb.org/3/genre/movie/list?",
method: "GET",
responseType: "json",
params: {
api_key: "00000000000",
language: "en-US"
}
}).then(result => (results = result.data.genres));
let a = [];
for (let i = 0; i < 10; i++) {
let name = getNestedObject(results, [i, "name"]);
a.push(name);
}
setgenreList(a);
console.log(genreList);
}, [genreList]);
return <div>test</div>;
}
我也试过没有 useEffect ,它给出了相同的循环结果。
我已经<Genres />
在渲染中了。
解决方案
它的发生是因为你在打电话
setgenreList(a);
在 useffect ,genreList 改变它的状态, UseEffect 再次运行
当你写作时
useEffect(() => {}, [genreList])
然后每次调用它的设置器setgenreList时都会调用它
你可以写
useEffect(() => {
//code here
}, [])
推荐阅读
- c++ - 如何使用 BOOST BinaryFunction 概念?
- python-3.x - 如何使用 while 循环和 for 循环来编写这种模式?
- javascript - 无法验证表单并显示错误消息
- bash - 如何按文件大小排序并在大小为零时删除
- javascript - XMLHttpRequest 从本地服务器而不是从外部服务器加载 XML?
- scala - 为什么 Scala Cats 使用类型类而不是继承?
- visual-studio-code - 如何在 vs 代码中安装平面图标主题
- typescript - 编译器无法识别自定义 TS 类型
- python - 我不明白如何让 displayGPA() 干净地处理 ZeroDivisionError
- excel - 将市场数据接收到 Excel 中