reactjs - 如何让反应等待从 Fetch 获取数据?
问题描述
首先,我使用 useReducer 来设置 State。
当组件挂载时,这个 useFetch 钩子将被触发,并且
包含 action(类型和有效负载)的回调将这个初始数据设置为 State(jobInfo)。
import { useEffect, useState } from 'react';
const useFetch = (callback, url) => {
const [loading, setLoading] = useState(false);
const fetchInitialData = async () => {
setLoading(true);
const response = await fetch(url);
const initialData = await response.json();
callback(initialData);
setLoading(false);
};
useEffect(() => {
fetchInitialData();
}, []);
return loading;
};
export default useFetch;
但问题是,当我尝试使用地图时,
由于尚未获取数据而出现not a function
错误!
所以我想知道如何让它等到数据到达?jobInfo
const JobList = () => {
const { jobInfo, loading } = useContext(JobInfoContext);
console.log(jobInfo);
jobInfo['data'].map((infos) => console.log(infos));
}
解决方案
您只需检查数据是否存在。设置状态后,组件将重新渲染:
const JobList = () => {
const { jobInfo, loading } = useContext(JobInfoContext);
console.log(jobInfo);
!loading && jobInfo['data'] && jobInfo['data'].map((infos) => console.log(infos));
}
推荐阅读
- javascript - 在js中检测移动设备上的VH并返回它的当前值
- c# - 字符串格式的 RSA 公钥和私钥
- wordpress - 从购物车元存储 WP 变量(Woocommerce)
- java - 在 Java 中具有相对相同性能的并行和单线程代码
- cors - Microsoft Edge 和 EventSource 的 CORS 无效
- azure - 带有 Cosmos DB 输出本地开发主机失败的 Azure HTTP 函数触发器 2.x
- android - Android kotlin - 辅助构造函数
- c - 取消引用 void**-casted type** 会破坏严格的别名吗?
- java - SharedPreferences:放置默认值或删除键?
- javascript - Javascript 适用于第一页,但不适用于第二页