我是Firebase和Hooks的新手。我正在努力使用useEffect管理onAuthStateChanged。我需要在useEfect中设置setState,但在状态更改时也需要重新渲染。
我正在此文件中创建一个文档:
export const createUserProfileDocument = async (userAuth, additionalData) => {
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,
...additionalData,
});
} catch (err) {
console.log('Error creating user', err.message);
}
}
return userRef;
};
在我的app.js中,我需要知道用户是否注销。这就是为什么我在useEffect中添加了auth.onAuthStateChanged
,但是在这个useEffect中我设置了用户状态。我应该添加到依赖项。没有依赖性,我不能在用户注销时重新提交。
useEffect(() => {
const unsub = auth.onAuthStateChanged(async (userAuth) => {
if (userAuth) {
const userRef = await createUserProfileDocument(userAuth);
userRef.onSnapshot((snapshot) =>
SetCurrentUser({ id: snapshot.id, ...snapshot.data() })
);
}
});
return () => {
unsub();
};
}, []);