【问题标题】:React Native w/ firebase "undefined is not an object"React Native w / firebase“未定义不是对象”
【发布时间】:2020-08-17 03:56:18
【问题描述】:

收到此错误:

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 集合。

我很确定这是我在快照上做错了,但我真的不确定是什么,非常感谢所有帮助:)

【问题讨论】:

  • 我猜docdoc.data() 的返回值是未定义的。尝试一次调试一个,看看哪个是未定义的,然后从那里开始工作。
  • 您是否要获取boobooks 子集合的文档?

标签: javascript reactjs firebase react-native google-cloud-firestore


【解决方案1】:

错误告诉你doc.data()返回了undefined,这意味着你请求的文档不存在。您可能传递了 userEmail 的值,而不是您期望的值。由于您没有显示该值,因此我们不确定出了什么问题。

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

【讨论】:

    【解决方案2】:

    有几种可能性。但是,db并没有定义在getData函数的范围内……在哪里定义的?

    【讨论】:

      【解决方案3】:

      如果我正确理解了您的问题,您希望获取 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 字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        相关资源
        最近更新 更多