[英]How to get all documents in a collection in firestore?
我正在嘗試獲取我的集合中的所有文檔,但日志返回一個空數組,並且我收到一條錯誤消息,指出無法讀取未定義讀取的屬性 forEach。 我已經按照文檔進行操作,但找不到問題出在哪里。 有人可以幫忙嗎? 下面的代碼片段是我在我的 index.js 中使用它的自定義掛鈎,如下所示。 此日志返回一個空數組。
const { docs } = useFireStore('barbers')
console.log('docs',docs)
import { useState, useEffect } from "react";
import { collection, getDocs, querySnapshot } from "firebase/firestore";
import {db} from '../../../base'
export const useFireStore = (mycollection) => {
const [docs, setdocs] = useState([])
useEffect(() => {
const unsub = async () => {
await getDocs(collection(db,mycollection))
querySnapshot.forEach((doc) => {
let document =[];
// doc.data() is never undefined for query doc snapshots
document.push({...doc.data() ,id: doc.id});
//console.log(doc.id, " => ", doc.data());
});
setdocs(document);
}
return () => unsub();
}, [mycollection])
return { docs };
}
如果我沒記錯的話,查詢快照是您調用getDocs
時等待的返回值。 您還每次在forEach
回調中重新聲明document
數組,它應該在循環外聲明,連同setDocs
state 更新程序 function。
export const useFireStore = (mycollection) => {
const [docs, setDocs] = useState([]);
useEffect(() => {\
const unsubscribe = async () => {
const querySnapshot = await getDocs(collection(db,mycollection));
const document =[];
querySnapshot.forEach((doc) => {
document.push({
...doc.data(),
id: doc.id
});
});
setdocs(document);
}
return unsubscribe;
}, [mycollection]);
return { docs };
}
Drew 的回答為您提供了一次文件,所以。
但是,如果您想監聽文檔的更新,並在您的 UI 中顯示這些更新,請使用onSnapshot
而不是getDocs
:
export const useFireStore = (mycollection) => {
const [docs, setdocs] = useState([])
useEffect(() => {
const unsub = onSnapshot(collection(db, mycollection), (querySnapshot) => {
const documents = querySnapshot.docs.map((doc) => {
return {
...doc.data(),
id: doc.id
}
});
setdocs(documents);
});
return () => unsub();
}, [mycollection])
}
這個:
onSnapshot
而不是getDocs
,這樣您還可以監聽數據的更新。docs
state 變量,因為這似乎容易出錯。onSnapshot
偵聽器的 function。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.