下面是我的函数,我尝试在其中按用户. 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应用程序中想要的。
任何帮助都将不胜感激。
1条答案
按热度按时间wgmfuz8q1#
出现此错误是因为您的
user
是null
。1.尝试在访问
id
之前打印user
的值。👈您将知道user的值1.尝试用
if(user) user.id
Package 您的user.id
。👈这应该可以删除您的错误