javascript - 我想在 useEffect 中使用异步函数,但它不起作用

标签 javascript reactjs

这是我的业余项目,我想使用一个返回用户数据的异步函数。 所以我在 useEffect 之外声明了 async 函数,并尝试在 async 函数中 setState。

当我在 then block 中使用 console.log res 时,它会显示我预期的结果,但是当我在异步 getData 函数之外使用 console.log 时,它不会工作

为什么 setUsersData(setState) 不能按我的预期工作?

const FeedPage = () => {
  const [usersData, setUsersData] = useState()

  const getData = useCallback(async () => {
    // eslint-disable-next-line promise/always-return
    await Goodlogging.inquireFeed().then((res) => {
    // when i console.log here it returns as i expected...
      console.log(res.data)
      setUsersData(res.data)
    })
  }, [])


  useEffect(() => {
    // try to console.log data but it returns undefined ...
    console.log('usersData:', usersData)
  }, [usersData])

  useEffect(() => {
    getData()
  }, [getData])

最佳答案

useEffect 回调不能是async,但您可以在内部声明一个自执行的异步函数。

另外,请注意,不要将 promise 语法与 async/await 语法一起使用。

 useEffect(() => {
   (async () => {
     const res = await Goodlogging.inquireFeed()
     // when i console.log here it returns as i expected...
     console.log(res.data)
     setUsersData(res.data)

   })()
 }, [getData])

关于javascript - 我想在 useEffect 中使用异步函数,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73404157/

相关文章:

javascript - 使用包含逗号分隔值的变量填充下拉框

javascript - 将标签id设置为对象属性

javascript - 如何在 jsx 标签内写一个大于号?

css - Electron react 粘性表格标题

javascript - SharePoint web 部件自动刷新 javascript 事件?

javascript - 使用 xml-stream 进行 XML 转换的 Node.js 流

javascript - 闭包编译器不会删除未使用的属性

javascript - 检查多个输入空值不起作用

javascript - Redux:如何基于其他状态创建状态?

javascript - 如何使这个 setState 函数非递归