You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase中获取引用文档数据?React开发场景实操问题

问题原因

你打印出的gu对象是Firestore的*DocumentReference(文档引用)*类型,它只是指向对应user文档的指针,本身不存储文档的实际业务数据,需要主动查询这个引用对应的文档才能拿到数据。

解决方法

你需要基于拿到的引用实例,调用Firestore的查询方法获取实际数据,以下是两种常用场景的代码实现:

  • 场景1:只需要一次性获取user数据,不需要实时监听变化
import { doc, onSnapshot, getDoc } from "firebase/firestore";

onSnapshot(doc(firestore, "cards", cardId), async (cardDoc) => {
    // 拿到user文档引用
    const userDocRef = cardDoc.data().uid;
    // 一次性查询user文档数据
    const userDocSnap = await getDoc(userDocRef);
    if (userDocSnap.exists()) {
        // 此处即可拿到user的实际业务数据
        const userData = userDocSnap.data();
        console.log(userData);
    }
});
  • 场景2:需要实时监听关联的user文档的变化
import { doc, onSnapshot } from "firebase/firestore";

let userUnsubscribe = null;
onSnapshot(doc(firestore, "cards", cardId), (cardDoc) => {
    // 先取消之前的user监听,避免重复订阅
    if (userUnsubscribe) userUnsubscribe();

    const userDocRef = cardDoc.data().uid;
    // 监听user文档变化
    userUnsubscribe = onSnapshot(userDocRef, (userDocSnap) => {
        if (userDocSnap.exists()) {
            const userData = userDocSnap.data();
            console.log(userData);
        }
    });
});

补充说明

  • 你拿到的DocumentReference实例本身也包含id、path等属性,对应关联的user文档的id和集合路径,必要时也可以手动拼接路径查询文档,直接用引用实例查询更简洁
  • 必须调用exists()方法判断文档是否存在,避免访问空文档数据报错

内容的提问来源于stack exchange,提问作者Bendik Skarpnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:36:03