hooks/useUser.js:
import { useEffect, useState } from 'react';
export const useUser = (auth) => {
const [user, setUser] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const [err, setErr] = useState(null);
useEffect(() => {
auth.onAuthStateChanged(
(userData) => {
setIsLoading(false);
if (userData) setUser(userData);
else console.log('No user defined yet!');
},
(err) => {
setIsLoading(false);
setErr(err);
}
);
}, []);
return { user, isLoading, err };
};hooks/useCollection.js:
import { onSnapshot } from 'firebase/firestore';
import { useEffect, useState } from 'react';
export const useCollection = (query) => {
const [docs, setDocs] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [err, setErr] = useState(null);
useEffect(() => {
onSnapshot(
query,
(docsSnapshot) => {
setIsLoading(false);
let docs = [];
docsSnapshot.forEach((doc) => docs.push({ ...doc.data(), id: doc.id }));
setDocs(docs);
},
(err) => {
setIsLoading(false);
setErr(err);
}
);
}, []);
return { docs, isLoading, err };
};