我有一個 React 博客,我使用 Firebase 作為后端。我使用 createUserWithEmailAndPassword 方法,經過身份驗證的用戶被重定向到博客,在那里他們可以開始添加博客。
我將他們的帖子存盤在 firestore 集合“帖子”中。沒有問題。
我還希望在使用用戶首選項登錄后創建一個用戶物件。假設每個人都選擇了一個特定的主題。
我在 firestore 創建了一個名為“users”的集合,我將在其中{user: "[email protected], theme: "dark" ,isAdmin: false, etc}使用 addDoc 方法存盤每個物件。
我希望這個物件創建一次,而不是每次用戶登錄時創建。
如果用戶已經存在,如何檢查“用戶”集合?
我得到了集合 getDocs(userCollectionRef) 然后我過濾了資料,讓我們說一個屬性,看看那里是否有那個物件。
如果不是,我想使用 addDoc 方法添加檔案。
這是請求:
useEffect(() => {
const createUserData = async () => {
const data = await getDocs(usersCollectionRef);
const docs = data.docs.map((doc) => ({
...doc.data(),
id: doc.id,
}));
const userData = docs.filter((doc) => doc.user === user.email);
if (userData.length === 0) {
await addDoc(usersCollectionRef, {
user: user.email,
isAdmin: false,
theme: "dark",
});
}
};
if (user) {
createUserData();
}
}, [user, usersCollectionRef]);
似乎我正在嘗試同時檢查并添加到集合中,這就是它不起作用的原因。
有任何想法嗎?
我是否應該有一個中間步驟,將我從 getDocs 獲得的內容存盤在某種狀態或其他狀態,然后執行第二個請求?
誰能解釋一下?
uj5u.com熱心網友回復:
我將 if 陳述句更改為這樣的回傳并且它起作用了。
return (
userData.length === 0 &&
(await addDoc(usersCollectionRef, {
user: user.email,
wordGoal: wordGoal,
}))
);
我想我在第一個承諾之后回傳第二個承諾,這就是為什么
uj5u.com熱心網友回復:
我猜當 getDocs 請求發生時,因為它的異步資料然后是空的,然后代碼繼續執行 if 陳述句,此時該陳述句為真(我們沒有記錄)并執行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395209.html
標籤:反应 火力基地 谷歌云firestore 拿来
