繁体   English   中英

React Native w/ firebase “未定义不是对象”

[英]React Native w/ firebase “undefined is not an object”

收到此错误:

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 集合(显示在平面列表中,当新内容添加到集合时需要更新)请注意,屏幕外有一个 users 集合。

在此处输入图像描述 我很确定这是我在快照上做错了,但我真的不确定是什么,非常感谢所有帮助:)

该错误告诉您doc.data()返回未定义,这意味着您请求的文档不存在。 您可能为userEmail传递了一个与您预期不同的值。 由于您没有显示价值,我们不确定出了什么问题。

我将指出文档 ID 必须完全匹配,因此如果 email 地址不完全是带有大写 E 的“Email@email.com”,则查询将不会使用您在此处显示的内容返回文档。

有几种可能性。 但是,db 没有在 getData function 的 scope 中定义......它在哪里定义?

如果我正确理解您的问题,您想获取用户文档的books (或boo ?)子集合中的文档,其 id 对应于userEmail

如果这个假设是正确的,您应该执行以下操作:

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字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM