前提・実現したいこと
現在ログイン中のユーザー情報をfirestoreから取得して、ユーザー情報を画面に表示させたいのですが、下記のコードではうまく動作せず質問させていただきました。
下記のコードを実行した際、fetchCurrentUserの※1のconsole.log()では適切に取得したユーザーデータが出力されるのですが、※2のconsole.log(result)では値が出力されずPromise {<pending>}
と出力されます。
resultに取得したデータが入らないためその先のgetCurrentUserの部分でもcurrentUserDataがundefinedになってしまいます。
言葉足らずなところもあると思いますが詳しい方、解決方法を教えていただけると幸いです。
よろしくおねがいします。
該当のコード
JavaScript
1import { View, Text } from "react-native"; 2import React, { useState, useEffect } from "react"; 3import { getAuth } from "firebase/auth"; 4import { db } from "../firebase"; 5import { collection, query, where, getDocs } from "firebase/firestore"; 6 7const test = () => { 8 const [currentUserInfo, setCurrentUserInfo] = useState(); 9 const auth = getAuth(); 10 11 const fetchCurrentUser = () => { 12 const userData = collection(db, "users"); 13 let result; 14 getDocs( 15 query(userData, where("uid", "==", `${auth.currentUser.uid}`)) 16 ).then((querySnapshot) => { 17 result = querySnapshot.docs.map((doc) => doc.data()); 18 // ↓※1↓ 19 console.log(querySnapshot.docs.map((doc) => doc.data())); 20 }); 21 // ↓※2↓ 22 console.log(result); 23 return result; 24 }; 25 26 27 const getCurrentUser = async () => { 28 const currentUserData = await fetchCurrentUser(); 29 setCurrentUserInfo(currentUserData); 30 console.log(currentUserInfo); 31 }; 32 33 useEffect(() => { 34 getCurrentUser(); 35 }, []); 36 return ( 37 <View> 38 <Text></Text> 39 </View> 40 ); 41}; 42 43export default test; 44
試したこと
fetchCurrentUserで直接setCurrentUserInfo(querySnapshot.docs.map((doc) => doc.data()));
と書いて、stateを更新しようとしたのですが、下記のようなエラーが出てしまいます。(省略済)
react-dom.development.js:13231 Uncaught Error: Objects are not valid as a React child (found: object with keys {uid, email}). If you meant to render a collection of children, use an array instead.
あなたの回答
tips
プレビュー