React Native w/firebase“未定义不是一个对象”
2020-08-17
910
收到此错误:
TypeError: undefined is not an object (evaluating 'doc.data().books')
来自此代码:
const getData = () => {
const snapshot = db.collection('users').doc(userEmail).onSnapshot((doc) => {
setData(doc.data().books)
})
}
useEffect(() => {
getData()
}, [])
这是 firestore 数据库,尝试获取更新的 boo 集合(显示在平面列表中,当新内容添加到集合时需要更新)请注意,有一个用户集合不在屏幕上。
3个回答
错误告诉您
doc.data()
返回了未定义,这意味着您请求的文档不存在。您可能为
userEmail
传递了一个您预期以外的值。由于您没有显示该值,我们无法确定出了什么问题。
我要指出的是,文档 ID 必须完全匹配,因此如果电子邮件地址不是“ [email protected] ”且大写 E,则查询将不会返回使用您在此处显示的内容的文档。
Doug Stevenson
2020-08-17
有几种可能。但是,db 未在 getData 函数范围内定义...它在哪里定义?
Jose Cabrera Zuniga
2020-08-17
如果我正确理解了您的问题,您想要获取 id 对应于
userEmail
的用户文档的
books
(或
boo
?)子集合中的文档。
如果这个假设正确,您应该执行以下操作:
const getData = () => {
db.collection('users').doc(userEmail).collection('books')
.onSnapshot(querySnapshot => {
var books = [];
querySnapshot.forEach(doc => {
books.push(doc.data());
});
// Here you have an array of all the book objects.
// It's up to you to use it as you wish with your setData() function
});
}
请注意,使用
doc.data().books
您实际上是在尝试获取用户文档的
books
字段。
Renaud Tarnec
2020-08-17