博客 / 詳情

返回

在useEffect中執行異步請求的幾種方式

當在React中使用異步請求時,通常使用useEffect來觸發異步請求的執行,以便在組件掛載時或某些特定狀態發生變化時獲取數據。

在使用useEffect時,我們可以採用多種方式來執行異步請求,其中包括使用異步函數表達式、IIFE、Promise.then和函數聲明。但是,需要注意的是不能將async函數直接傳遞給useEffect,
如果直接把async函數傳給useEffect最為第一個參數,會報錯。因為useEffect的第一個參數的最終返回值要是void。而async函數是返回一個Promise。

image.png

當在useEffect中執行異步請求時,可以使用以下幾種方式:

  • 使用異步函數表達式

    useEffect(() => {
       const fetchData = async () => {
          const result = await axios(
              'xxxxx',
          );
          setData(result.data);
      }
      fetchData();
    }, []);

    可以將函數表達式放在外面的useCallback函數中,以便在其他地方使用該函數。

const fetchData = useCallback(async () => {
    const result = await axios(
        'xxxxx',
    );
    setData(result.data);
}, []);

useCallback(() => {
    fetchData();
}, [fetchData]);
  • 使用IIFE

    useEffect(() => {
      (async () => {
          const result = await axios(
              'xxxxx',
          );
          setData(result.data);
      })();
    }, []);

    這種方式使用立即調用函數表達式來執行異步請求。

  • 使用Promise.then
useEffect(() => {
    axios(
        'xxxxx',
    ).then(result => setData(result.data));
}, []);

這種方式使用then方法來處理異步請求的響應結果。

  • 使用函數聲明

    useEffect(() => {
      async function fetchData() {
          const result = await axios(
              'xxxxx',
          );
          setData(result.data);
      }
      fetchData();
    }, []);

除了使用useEffect來執行異步請求之外,我們還可以使用其他一些庫來處理異步數據,例如Redux、Axios等。這些庫提供了更多的功能和選項,可以幫助我們更好地管理應用程序中的數據和狀態。另外,對於一些更高級的請求處理,可以使用swr, React-Query等這些庫。

在處理React中的異步請求時,我們需要考慮各種因素,例如數據獲取的時機、請求的參數和處理響應結果等。通過選擇適當的方式和工具來處理異步數據,我們可以更好地構建可靠的React應用程序。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.