Как мне использовать UID, чтобы получить мои данные из Firebase? - PullRequest
0 голосов
/ 02 апреля 2020

Привет! Я создал Аутентификатор для личного журнала, который проверяет, есть ли пользователь.

Аут. js:

import React, { useEffect, useState } from 'react';
import { Authentication } from './components/firebase';
import { getDefaultNormalizer } from '@testing-library/react';

export const AuthContext = React.createContext();


    export const AuthProvider = ({ children }) => {
        const [currentUser, setCurrentUser] = useState(null);
        const [pending, setpending] = useState(true);
        const [userData, setuserData] = useState(null);

        useEffect(() => {
            Authentication.auth().onAuthStateChanged((user) => {
                setCurrentUser(user)
                setpending(false)
                localStorage.setItem('user', user.uid);
                console.log(localStorage.getItem('user'));
            });

        }, []);

        if(userData !== null) {
            console.log(userData)
        }

        if (pending) {
            return <></>
        }

        return (
            <AuthContext.Provider
                value={{
                    currentUser
                }}
            >
                {children}
            </AuthContext.Provider>
        );
    }; 

PrivateRoute.js:

    import React, { useContext } from 'react';
    import { Route, Redirect } from 'react-router-dom';
    import { AuthContext, AuthProvider } from './Auth';

    const PrivateRoute = ({ component: RouterComponent, ...rest }) => {
        const {currentUser} = useContext(AuthContext);
        return (
            <Route
                {...rest}
                render={routeProps =>
                    !!currentUser ? (
                        <RouterComponent {...routeProps} />
                    ) : (
                            <Redirect to={'/login_page'} />
                        )
                }
            />
        );
    };

    export default PrivateRoute;

Я просто обвиваю <PrivateRoute /> вокруг путей Я не хочу, чтобы пользователь получил доступ. Используя ту же информацию из Auth, как лучше всего извлечь данные из данных моего fireStore, используя uid, как я могу пройти через uid? Я хотел бы, чтобы я получал информацию каждый раз, когда база данных обновляется. Я слышал, что могу использовать onSnapshot, но на самом деле не уверен,

Я написал что-то подобное на моем рабочем столе. js:

const getData = () => {
    Authentication.firestore().collection('Health_data')
        .doc('how do I get the uid?')
        .get()
        .then(doc => {
            const data = doc.data();
            localStorage.setItem('user_data', JSON.stringify(data));
            setuserData(data)
            console.log(data)
        }).catch(function (error) {
            console.error("Error reading health", error);
        });

}

Код заключения:

const [healthData, healthDataSet] = useState(null)

useEffect(() => {
    const userId = Authentication.auth().currentUser.uid;
    Authentication.firestore().collection('Health_data')
        .doc(userId)
        .get()
        .then(doc => {
            healthDataSet(doc.data())
        }).catch(function (error) {
            console.error("Error reading health", error);
        });
}, []);

Это код, который я придумал, и он работает, но мне интересно, есть ли лучший код, который я мог бы использовать, так как он будет извлечен из база данных глупое количество раз?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...