如何在 useEffect 中使用异步函数?

2025-06-09

如何在 useEffect 中使用异步函数?

在 React 中,我们都一定使用过 useEffect hook,它在执行 DOM 更新后运行,并帮助我们在渲染后执行一些操作。

在探索在 useEffect 内部进行异步调用的不同方法之前,让我们先讨论一下其背后的问题。

为什么我们不应该将async关键字与 useEffect 一起使用?

让我们举一个例子来理解这一点。

const [state, setState] = useState(0)

useEffect(async () => {
    await setState((state) => state + 1);
}, []);
Enter fullscreen mode Exit fullscreen mode

上面的代码会报错,因为async 函数返回的是 promise,而 useEffect 并不期望回调函数返回 promise。它应该返回空值或者一个函数。

如何在 useEffect 中调用异步函数?🤔

为了在 useEffect hook 中进行异步调用,我们可以使用以下方法。

  • 在 useEffect 中定义异步函数。
 useEffect(() => {
   const fetchData = async()=> {
     const data = await getData()

     return data
   }
   fetchData()
 }, []);
Enter fullscreen mode Exit fullscreen mode
  • 在 useEffect 之外定义异步函数。
  const [state, setState] = useState(0)

  const fetchData = useCallback(async()=> {
    const data = await getData();
    setState(data)
  }, [])

  useEffect(() => {
    fetchData()
  }, [fetchData]);
Enter fullscreen mode Exit fullscreen mode

在这种情况下,我们需要将异步函数包装在 useCallback 中,以便将其与依赖数组进行映射。

注意 - 如果我们不使用钩子包装函数,useCallback它将在每次更新时重新渲染,这将导致再次触发 useEffect 钩子。

我已经用这两种方法将异步函数与 useEffect 结合使用。欢迎您就此主题补充任何重要观点或其他方法。🙌🏻

学习愉快!👩🏻‍💻

鏂囩珷鏉ユ簮锛�https://dev.to/jasmin/how-to-use-async-function-in-useeffect-5efc
PREV
你应该了解的 3 个核心 JavaScript 概念(函数)
NEXT
使用 HTML、CSS 和原生 JS 实现 Windows 10 网格悬停效果 开始吧!以上就是全部代码