fetch 和 setInterval 反应钩子问题

Pon*_*iav 7 fetch setinterval reactjs react-hooks

我最近使用 React 的钩子从服务器获取数据,但我遇到了钩子的问题。代码看起来是正确的,但看起来 useEffect 不是第一次调用,而是在 setInterval 3 秒后调用。在它出现之前,我有 3 秒钟的空白表格。我想直接显示数据,3秒后调用。

正确的使用方法是什么?

const [datas, setDatas] = useState([] as any);

  useEffect(() => {
    const id = setInterval(() => {
        const fetchData = async () => {
          try {
            const res = await fetch(URL);
            const json = await res.json();
            setDatas(jsonData(json));
          } catch (error) {
            console.log(error);
          }
        };
        fetchData();
    }, TIME)

    return () => clearInterval(id);
  }, [])
Run Code Online (Sandbox Code Playgroud)

Dre*_*ese 7

您需要间隔之外fetchData最初调用一次。定义区间外。fetchData

useEffect(() => {
  // (1) define within effect callback scope
  const fetchData = async () => {
    try {
      const res = await fetch(URL);
      const json = await res.json();
      setDatas(jsonData(json));
    } catch (error) {
      console.log(error);
    }
  };
    
  const id = setInterval(() => {
    fetchData(); // <-- (3) invoke in interval callback
  }, TIME);

  fetchData(); // <-- (2) invoke on mount

  return () => clearInterval(id);
}, [])
Run Code Online (Sandbox Code Playgroud)