无法使用useEffect配置Firebase onAuthStateChanged

时间:2020-08-01 06:58:24

标签: reactjs

我是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();
        };
    }, []);

0 个答案:

没有答案