reactjs React中的Firestore错误:未捕获(承诺中)类型错误:无法读取null的属性(正在读取"uid")

jfewjypa  于 2023-01-05  发布在  React
关注(0)|答案(1)|浏览(141)

下面是我的函数,我尝试在其中按用户. uid过滤Firestore集合中的注解:

const fetchPost = async () => {
    const queryConstraints = []
    if (user.uid != null) queryConstraints.push(where('userID', '==', user.uid))
    if (user.email != null) queryConstraints.push(where('userEmail', '==', 

user.email))
        const q = query(collection(db, 'notes'), ...queryConstraints)
        await getDocs(collection(q))
            .then((querySnapshot)=>{              
                const newData = querySnapshot.docs
                    .map((doc) => ({...doc.data(), id:doc.id }));
                setNotes(newData);                
                console.log(notes, newData);
            })
    }

然而,当我尝试在浏览器中运行这段代码时,无论是Chrome、Safari还是Firefox,我都会收到以下错误:
未捕获(承诺中)类型错误:无法在fetchPost(NoteList. js:66:1)读取null的属性(读取"uid")
我不知道如何修复这个错误,或者真的是正确的问题问过如何问过为什么会发生这种情况。
以前,我使用以下函数:

const fetchPost = async () => {
        await getDocs(collection(db, "notes"))
            .where('userEmail', '==', user.email)
            .then((querySnapshot)=>{              
                const newData = querySnapshot.docs
                    .map((doc) => ({...doc.data(), id:doc.id }));
                setNotes(newData);                
                console.log(notes, newData);
            })
    }

我得到了前面提到的相同错误,但至少在使用此函数时,如果我对user.uid进行了任何更改,React的热重新加载将刷新页面,并将在控制台中引入查询的数据,但当我按F5键时,数据没有显示,并显示上面列出的错误消息。
此外,当我使用Firestore中的查询构建器与相同的参数,我能够拉我想要显示的数据,它只是没有拉/显示在我的React应用程序中想要的。
任何帮助都将不胜感激。

wgmfuz8q

wgmfuz8q1#

出现此错误是因为您的usernull
1.尝试在访问id之前打印user的值。👈您将知道user的值
1.尝试用if(user) user.id Package 您的user.id。👈这应该可以删除您的错误

相关问题