reactjs - 设置钩子启动无限循环和应用程序挂起
问题描述
这可能与我的问题有关,但我尝试使用没有运气的答案。就像我的反应组件在设置钩子 setShow(!show) 时启动了一个无限循环(应用程序挂起):
这里有一个沙箱,显示了问题: https ://codesandbox.io/s/collapse-gmqpp
import React, { useState, useEffect } from "react";
const CrawlJobs = () => {
const [mediaList, setMediaList] = useState([]);
const [show, setShow] = useState(false);
useEffect(() => {
const fetchMediaData = async () => {
try {
setMediaList([{ id: 1, name: "Facebook" }, { id: 2, name: "Twitter" }]);
} catch (error) {}
};
fetchMediaData();
}, [mediaList]);
const toggle = () => {
setShow(!show);
};
return (
<div>
{mediaList.map(media => (
<div>
<div onClick={() => toggle()}>Show</div>
{show && <h1>Toggled context</h1>}
</div>
))}
</div>
);
};
export default CrawlJobs;
解决方案
在这个钩子中,你也在更新mediaList
和观察相同的变化。
useEffect(() => {
const fetchMediaData = async () => {
try {
setMediaList([{ id: 1, name: "Facebook" }, { id: 2, name: "Twitter" }]);
} catch (error) {}
};
fetchMediaData();
}, [mediaList]);
这就是无限循环的原因。请使用回调使用useCallback
或完全删除那里的依赖数组。
推荐阅读
- symfony - 传递给 SymfonyFixturesLoader::addFixture() 的参数 1 必须是 Doctrine\Common\DataFixtures\FixtureInterface 的一个实例
- html - 使 HTML div 更棒的方式
- python - python - 正则表达式用逗号或点捕获一个数字,除非在标记之间
- android - android:pivotY 不会向我的 android 矢量可绘制对象添加顶部填充
- c# - 将 xml 文件添加到 ASP.NET Core http post 请求
- java - 在碧玉报告PDF中获取空值
- security - 我们如何将客户的无服务器应用程序与自己的用户群与我们的 OAuth 服务器集成?
- django - 保存模型并在保存后获取它以将其用作 ForeignKey 以创建另一个模型
- python - Flask Redis Queue (RQ) worker 无法导入名为 app 的模块
- php - highcharts 上的子系列数组