reactjs 无法从useEffect函数中的Firebase查询检索文档ID

dsf9zpds  于 2023-02-03  发布在  React
关注(0)|答案(1)|浏览(83)

我设置了以下函数,它可以正确地将数据发送到"userInfo",但是如何访问"id"的值以便在另一个函数中使用呢?

const [userInfo, setUserInfo] = useState("");

    const userID = auth.currentUser.uid;

    //function for automatically retrieving user
    useEffect(() => {
        const q = query(collection(db, 'users'), where("uid", "==", userID));
        onSnapshot(q, (querySnapshot) => {
            setUserInfo(querySnapshot.docs.map(doc => ({
                id: doc.id,
                data: doc.data()
            })))
        })
        console.log(userInfo);
    }, [])

请记住,"uid"不同于"id"。"id"是文档ID,"uid"是存储在文档中的值。
当我运行console. log(userinfo)时,它给了我一个对象数组。我唯一需要访问的是"id"的值。
我试着做console. log(userInfo [0]. id),直到我重新加载页面,然后我得到这个错误:
未捕获的类型错误:无法读取未定义的属性(读取"id")

kqlmhetl

kqlmhetl1#

将useState初始化为一个空字符串"",然后在useEffect中更改它。由于useEffect在页面呈现后立即触发,因此在useState仍为字符串时,您将在某个时刻触发console.log(userInfo[0].id
如果userInfo是一个字符串,当您试图访问userInfo[0].id时会发生什么情况?您正在试图访问未定义的内容
如果您使用console.log,则以下不会崩溃:

console.log(userInfo[0]?.id) //the **?** checks if the obj has the following prop

相关问题