Я не знаю, что я здесь делаю не так, но консоль для currentUser рендерится каждый раз. Я добавил зависимости currentUser, но он выполняет повторную визуализацию, я также добавил очистку, но при этом выполняется повторная визуализация.
const [currentUser, setcurrentUser] = useState({});
const aut = () => {
return authentication.onAuthStateChanged(async (user) => {
if (user) {
const userRef = await createUserProfileDoc(user);
userRef.onSnapshot((snapshot) => {
setcurrentUser({
id: snapshot.id,
...snapshot.data(),
});
});
console.log("inside", currentUser);
} else {
setcurrentUser(null);
}
// setcurrentUser(user);
// createUserProfi leDoc(user);
});
};
useEffect(() => {
// aut();
});
Даже при использовании зависимостей он возвращает null. Если я добавлю currentUser в [], то бесконечный l oop начнется с вывода консоли.
const [currentUser, setcurrentUser] = useState({});
const [user, setUser] = useState();
const aut = () => {
return authentication.onAuthStateChanged(async (user) => {
setUser(user);
if (user) {
const userRef = await createUserProfileDoc(user);
userRef.onSnapshot((snapshot) => {
setcurrentUser({
id: snapshot.id,
...snapshot.data(),
});
});
console.log("inside", currentUser);
} else {
setcurrentUser(null);
}
// setcurrentUser(user);
// createUserProfi leDoc(user);
});
};
useEffect(() => {
aut();
}, [user]);
это profileDo c FUnction
export const createUserProfileDoc = async (userAuth, data) => {
if (!userAuth) return;
const userRef = firestore.doc(`users/${userAuth.uid}`);
const snapShot = await userRef.get();
if (!snapShot.exists) {
const { displayName, email } = userAuth;
const createdAt = new Date();
try {
await userRef.set({
displayName,
email,
createdAt,
...data,
});
} catch (error) {
console.log("error in creating User", error.message);
}
}
return userRef;
};