Führen Sie bei React Return eine asynchrone Funktion aus
P粉545682500
P粉545682500 2023-09-07 17:31:08
0
1
538

Ich versuche, einen Benutzernamen aus einer Firebase-Datenbank in einer React-Return-Funktion anzuzeigen.

Ich habe eine Funktion namens getUserName, die den Benutzernamen aus der Datenbank abruft und zurückgibt.

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";
        };
    }

Dann versuche ich es in der Rückgabe der Reaktionskomponente anzuzeigen.

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

Aber ich bekomme diesen Fehler: 类型“Promise”不可分配给类型“ReactNode”。ts(2322) const getUserName: () => Promise

Ich bin mir nicht sicher, was ich hier falsch mache. Ich verwende TypeScript. Muss ich den Typ also irgendwo angeben?

P粉545682500
P粉545682500

Antworte allen(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>
  );
};
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage