开发者问题收集

我怎样才能让 React 等待从 Fetch 获取数据?

2021-04-07
323

首先,我使用 useReducer 来设置 State。
当组件挂载时,这个 useFetch 钩子将被触发,并且
包含操作(类型和有效负载)的回调会将此初始数据设置为 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;


但问题是,当我尝试使用 map 时,我得到了 not a function 错误
因为 jobInfo 数据尚未获取!
所以我想知道如何让它等到数据到达?

const JobList = () => {
  const { jobInfo, loading } = useContext(JobInfoContext);

  console.log(jobInfo);
  jobInfo['data'].map((infos) => console.log(infos));
}
1个回答

您只需检查数据是否存在。一旦设置了状态,组件就会重新渲染:

const JobList = () => {
  const { jobInfo, loading } = useContext(JobInfoContext);

  console.log(jobInfo);
  !loading && jobInfo['data'] && jobInfo['data'].map((infos) => console.log(infos));
}
Johannes Klauß
2021-04-07