首页 > 解决方案 > 未捕获的类型错误: snap.data() 未定义

问题描述

当我注册时,它在浏览器上显示以下错误,但用户被添加到 firebase 并且刷新浏览器时没有错误。

单击注册按钮时出错

这是我的代码片段。

fb.firestore
            .collection('chatUsers')
            .doc(authUser.uid)
            .onSnapshot(snap => {
              setChatConfig({
                userSecret: authUser.uid,
                avatar: snap.data().avatar,
                userName: snap.data().userName,
                projectID: '###################',
              });
            })

标签: reactjsfirebase

解决方案


没有看到数据库很难说。根据 Firebase 文档,如果调用中的指定文档不存在,则.data()返回。undefined.doc()

因此,因为snap.data()正在返回undefined,所以该位置的文档似乎在authUser.uid集合中不存在chatUsers

也许检查您的链上游的某些值。也许authUser.uid最初是null直到从数据库中获取用户数据?在不了解您的项目的情况下,这是一个猜测。

onSnapshot()另一个想法是处理回调函数中不存在文档的可能性。例如:

fb.firestore
            .collection('chatUsers')
            .doc(authUser.uid)
            .onSnapshot(snap => {
              if (snap.data() === "undefined") {
                console.log("no user")
              } else { 
                setChatConfig({
                  userSecret: authUser.uid,
                  avatar: snap.data().avatar,
                  userName: snap.data().userName,
                  projectID: '###################',
                });
              }
            })

希望这有所帮助。


推荐阅读