簡體   English   中英

反應 & Firebase 全球 State

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM