Я хочу сохранить коллекцию Firebase как состояние, чтобы я мог отобразить ее и отобразить каждого пользователя. Я использую onAuthStateChange, поэтому я не получаю ошибку uid undefine при обновлении страницы. Любая идея, почему установка состояния внутри onAuthStateChanged приведет к бесконечному l oop? OnAuthStateChange не должен прослушивать изменения в состояниях React, а скорее изменения в пользовательских состояниях, например, вошли в систему или вышли из системы, верно?
// userHome.js - infinite loop
export default function(){
const [userCollection, setUserCollection] = useState();
firebase.auth().onAuthStateChanged(isUser => {
if (isUser) {
const db = firebase.firestore();
const userRef = db.collection("user").doc(currentUser.uid);
setUserCollection(userRef);
}
});
}
// Auth.js
export const AuthContext = React.createContext();
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState(null);
useEffect(() => {
// Runs everytime auth state changes
app.auth().onAuthStateChanged(user => {
setCurrentUser(user);
user.getIdTokenResult().then(IdTokenResult => {
user.adminRole = IdTokenResult.claims.adminRole;
user.shopRole = IdTokenResult.claims.shopRole;
user.userRole = IdTokenResult.claims.userRole;
});
console.log("user state changed");
});
}, []);
return (
<AuthContext.Provider
value={{
currentUser
}}
>
{children}
</AuthContext.Provider>
);
};