![](/img/trans.png)
[英]Flutter app global state frorm streamsubscription of firebase document
[英]React & Firebase Global State
我正在使用react-firebase-hook ,我正在嘗試檢查用戶是否是管理員,我希望它是一個全局的 state ,我不必在每個組件中添加此代碼檢查用戶是否是管理員,這里是代碼..
import { useState, useEffect } from 'react';
import { query, collection, getDocs, where } from "firebase/firestore";
import { auth, db } from "../../config/fbConfig";
import { useAuthState } from "react-firebase-hooks/auth";
const CreateAnn = () => {
const [ann, setAnn] = useState(''); // ignore this
const [admin, setAdmin] = useState(false);
const [user] = useAuthState(auth);
const fetchAdmin = async () => {
try {
const q = query(collection(db, "users"), where("uid", "==", user?.uid));
const doc = await getDocs(q);
const data = doc.docs[0].data();
if(data.admin === true) {
setAdmin(true);
}
else { setAdmin(false); }
} catch (err) {
// do nothing
}
};
useEffect(() => {
fetchAdmin();
});
我想將其作為全局 state,嘗試使用 useContext 但我認為我使用它的方式不對,所以有人可以提供幫助嗎?
您使用上下文是正確的,但是,您可能會像您所說的那樣錯誤地使用它。 您應該設置一個上下文來處理當前登錄的用戶。 在這種情況下,您還可以從用戶集合中獲取用戶的額外詳細信息。
此外,您可以直接使用 ID 而不是where來獲取用戶:
const docRef = doc(db, "users", user.uid);
const docSnap = await getDoc(docRef);
const data = docSnap.exists ? docSnap.data() : undefined
按照此鏈接設置 auth correct 的上下文。
https://dev.to/dchowitz/react-firebase-a-simple-context-based-authentication-provider-1ool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.