Firebase Firestore调用docSnap.data()报TypeError:该函数不存在
解决Firebase Firestore中
TypeError: docSnap.data is not a function错误 问题根源
你调用getDocs()查询的是整个Events集合,它返回的是QuerySnapshot对象——这是集合所有文档的快照集合,而不是单个文档的DocumentSnapshot。data()方法是单个文档快照独有的,集合快照没有这个方法,所以会触发报错。
正确处理代码
根据你的需求,有两种处理方式:
1. 遍历集合中所有文档
如果要获取集合里的全部数据,需要遍历QuerySnapshot中的每个文档:
import app, { db } from "./app"; import { collection, getDocs } from "firebase/firestore"; export default async function getEvents() { // 你已经从app导入了db,无需重复调用getFirestore(app) const eventsCollection = collection(db, "Events"); const querySnapshot = await getDocs(eventsCollection); // 逐个打印文档ID和数据 querySnapshot.forEach((doc) => { console.log(`${doc.id} =>`, doc.data()); }); // 也可以把所有数据整理成带ID的数组 const eventsList = querySnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); console.log(eventsList); }
2. 获取单个指定文档
如果你的目标是获取某一个文档,应该用getDoc()替代getDocs():
import app, { db } from "./app"; import { doc, getDoc } from "firebase/firestore"; export default async function getSingleEvent() { // 替换成你要获取的文档ID const eventDoc = doc(db, "Events", "目标文档ID"); const docSnapshot = await getDoc(eventDoc); if (docSnapshot.exists()) { console.log(docSnapshot.data()); } else { console.log("目标文档不存在"); } }
额外提示
代码里已经从./app导入了db,没必要在函数里重复执行getFirestore(app),直接用导入的实例即可,减少冗余。
内容的提问来源于stack exchange,提问作者Muneeb
相关产品推荐
相关产品推荐

