You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Hook警告:useEffect中使用异步函数的问题与修正方案

解决useEffect中使用async函数触发的返回值警告

直接将async函数作为useEffect的回调函数时,会触发警告:useEffect function must return a function。

你的原始代码如下:

import React , {useState , useEffect} from 'react'
import axios from 'axios'

function Homescreen() {

useEffect(async() => {
  
try {
  const data = (await axios.get('/api/rooms/getallrooms')).data
console.log(data)
return data;

} catch (error) {
  console.log(error)
}

}, [])



  
  return (
    <div>
        <h1>Home Screen</h1>

    </div>
  )
}

export default Homescreen

问题原因

useEffect的回调函数仅允许两种返回值:要么是一个用于清理操作的函数,要么不返回任何值。而async函数会默认返回一个Promise对象,这不符合useEffect的要求,因此触发警告。

正确写法

官方给出的修正方案是在useEffect内部定义异步函数并立即调用:

useEffect(() => {
  async function fetchData() {
    // 在这里可以使用await
    const response = await MyAPI.getData(someId);
    // ...后续业务逻辑
  }
  fetchData();
}, [someId]); // 如果effect不需要依赖props或state,依赖数组传[]即可

针对你的代码,修改后的版本如下:

import React , {useState , useEffect} from 'react'
import axios from 'axios'

function Homescreen() {

useEffect(() => {
  // 内部定义异步函数
  async function fetchRooms() {
    try {
      const data = (await axios.get('/api/rooms/getallrooms')).data
      console.log(data)
      // 若需将数据存入state,可在此处调用setState
    } catch (error) {
      console.log(error)
    }
  }
  // 立即调用异步函数
  fetchRooms();
}, [])



  
  return (
    <div>
        <h1>Home Screen</h1>

    </div>
  )
}

export default Homescreen

内容的提问来源于stack exchange,提问作者AlphaJR09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:35:56