javascript - React useEffect hook 中的 Fetch API 没有响应
问题描述
我正在尝试使用 React useEffect 挂钩中的 fetch API 来发出获取请求,但我无法按预期打印我的响应。我只得到一个空数组作为响应。
这是我的代码。
function App() {
const [eventData,setEventData] = useState([]);
const [loading,setLoading] = useState(false);
useEffect(()=>{
const fetchData = async()=>{
setLoading(true);
const res = await fetch('https://eonet.sci.gsfc.nasa.gov/api/v2.1/events');
const {events} = await res.json();
setEventData(events);
setLoading(false);
}
fetchData();
console.log(eventData)
},[])
return (
<div>
{{!loading ? <Map eventData={eventData}/> : <Loader/>}}
</div>
);
}
export default App;
这是我的输出
但是,如果在 useEffect 钩子之后编写console.log语句,我会得到预期的输出。我不明白它为什么会这样。如果有人能解释原因,将不胜感激。提前致谢。
解决方案
问题是您试图在更新状态之前获取 eventData 的值,将 console.log(eventData) 移到 useEffect 之外,就像这样
function App() {
const [eventData,setEventData] = useState([]);
const [loading,setLoading] = useState(false);
useEffect(()=>{
const fetchData = async()=>{
setLoading(true);
const res = await fetch('https://eonet.sci.gsfc.nasa.gov/api/v2.1/events');
const {events} = await res.json();
setEventData(events);
setLoading(false);
}
fetchData();
},[])
console.log(eventData) //Here
return (
<div>
{{!loading ? <Map eventData={eventData}/> : <Loader/>}}
</div>
);
}
export default App;
推荐阅读
- python - 如果在 Pandas 中字符串的开头和结尾可用,如何有效地删除字符?
- python - 无法打开文件“audioAnalysis.py”:[Errno 2] 没有这样的文件或目录
- git - 如何在 vscode 中编辑 git add 的补丁?
- python - 在 Python 中使用 lambda 表达式(在 1 行中)自定义二维列表排序
- java - Java 中的隐式转换是如何工作的?
- pagespeed - Google Adsense 和 Google Analytics 让我的灯塔分数很低,有什么解决办法吗?
- python-3.x - 如何以数组作为输入参数在 DB2 中调用存储过程
- javascript - 如何裁剪超出图像边界的图像,就像我想通过添加透明/白色边距从 4:3 图像制作 1:1 图像一样?
- android - 无法在 android studio 中创建虚拟设备,错误:HAXM 安装失败
- firebase - 使用 Flutter,如何自动显示已在 firebase 中更新的电子邮件?