紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, React, 工作雜談, 未分類

React/next.js 出現 Uncaught TypeError: destroy is not a function 錯誤

問題描述

在React/next.js 開發上,有時候會出現以下錯誤訊息

後來查問題,才發現在於原先的代碼中,在使用 useEffect 時,已將其設定為 async ,如下:

  useEffect(async () => {
    try{
      // 呼叫API
    } catch (error) {
      // API錯誤處理
    }
  }, [])

而後續因應功能需求,將 API 部分獨立出來後,如果 useEffect 依舊設定為 async ,則會導致出現 Uncaught TypeError: destroy is not a function 錯誤

const getApiData = async () => {
  try{
    // 呼叫API
  } catch (error) {
    // API錯誤處理
  }
}

/* 錯誤範例
 * useEffect 設定為 async
 * 導致 Uncaught TypeError: destroy is not a function
 */
useEffect(async () => {
   getApiData()
}, [])

解決方法

檢查 useEffect 是否有必要設定為 async,如下方範例,useEffect 中並無需要設定為 async,刪除 async 設定,便可解決這錯誤

// 獨立的 api function
const getApiData = async () => {
  try{
    // 呼叫API
  } catch (error) {
    // API錯誤處理
  }
}


// useEffect 移除 async 設定
useEffect(() => {
   getApiData()
}, [])

發表迴響