I’m using nextjs trying make a component and getting Unhandled Runtime Error
TypeError: destroy is not a function with useEffect
"use client"
import { useEffect, useState} from "react";
export default function Page() {
const [items, setItems] = useState([]);
useEffect(async () => {
const response = await fetch("http://localhost:8080/items");
const data = await response.json();
setItems(data);
console.log(data);
}, []);
return (<>
<div style={{textAlign: "center"}}>Welcome to Items</div>
</>);
}
getting Unhandled Runtime Error
TypeError: destroy is not a function
If i don’t pass async callback to the useEffect error will gone.
3
Answers
The error you’re encountering, "Unhandled Runtime Error TypeError: destroy is not a function," is likely related to the use of an async function as the callback in your useEffect. The useEffect function does not support asynchronous callbacks directly because it expects the cleanup function (returned by the callback) to be a synchronous function. When you use an async function as the callback, it returns a promise, not a cleanup function, which can cause this error.
To fix this issue and avoid the error, you should make the callback within useEffect asynchronous only when necessary, and you should not return a promise from it. In your case, since you are using console.log("hello world"), which is synchronous, you don’t need the async keyword:
This should resolve the "destroy is not a function" error you are encountering. Ensure that any asynchronous operations you want to perform within useEffect are properly handled inside the synchronous callback function. If you have asynchronous code to execute, you can use asynchronous functions within the callback but make sure they don’t return promises directly to useEffect.
Try doing something like this.
The issue here is that the first argument of useEffect is supposed to be a function that returns either nothing (undefined) or a function (to clean up side effects). But an async function returns a Promise, which can’t be called as a function! It’s simply not what the useEffect hook expects for its first argument.
Unhandled Runtime Error TypeError: destroy is not a function
happens when we try to return something fromuseEffect
.And the
async
function declaration creates an AsyncFunction object. Each time when an async function is called, it returns a newPromise
.Try searching for similar issues – before posting a new one.
Your problem was already discussed here: Getting error after I put Async function in useEffect