在 React 返回中运行异步函数
P粉545682500
P粉545682500 2023-09-07 17:31:08
0
1
499

我正在尝试在 React 返回函数中显示 Firebase 数据库中的用户名。

我有一个名为 getUserName 的函数,它从数据库检索用户名并返回它。

const getUserName = async () => {
        try {
            const docRef = doc(db, "users/" + auth.currentUser?.uid);
            const userDocument = await getDoc(docRef);
            const userData = userDocument.data() as UserData;
            const userName = userData.name.split(' ')[0];
            return userName;
        } catch (error) {
            console.error(error)
            return "Failed to Retrieve UserName";
        };
    }

然后我尝试在反应组件的返回中显示它。

return (
  <div>
    Hi, {getUserName()}!
  </div>
)

但我收到此错误: 类型“Promise”不可分配给类型“ReactNode”。ts(2322) const getUserName: () => Promise

不确定我在这里做错了什么。我正在使用 TypeScript,所以我需要在某处指定类型吗?

P粉545682500
P粉545682500

全部回复(1)
P粉009186469

错误信息非常清楚。 要解决此问题,您可以修改 getUserName 函数以使用 useState 挂钩来存储用户名 并异步更新。

import { useState, useEffect } from 'react';

const MyComponent = () => {
  const [userName, setUserName] = useState('');

  useEffect(() => {
    const getUserName = async () => {
      try {
        // some code here
        setUserName(userName);
      } catch (error) {
        console.error(error);
        setUserName("Failed to Retrieve UserName");
      }
    };
    getUserName();
  }, []);

  return (
    <div>
      Hi, {userName}!
    </div>
  );
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!