Estoy siguiendo un tutorial en el que uso Firestore para recuperar datos de una colección. hay dos cosas principales: recuperar DOCUMENTO y COLECCIÓN que está anidado dentro de ese DOCUMENTO. Mi código a continuación se basa en FireStore web v8, y quiero convertirlo a la versión web 9. ¡Lo encontré muy complicado!
useEffect(()=>{ if(roomId){ db.collection('rooms').doc(roomId).onSnapshot(snapshot => { setRoomName(snapshot.data().name); }); db.collection('rooms').doc(roomId).collection("messages").orderBy("timestamp","asc").onSnapshot(snapshot => { setMessages(snapshot.docs.map(doc => doc.data())) }); } },[roomId])Prueba esto:
import { collection, query, where, doc, onSnapshot } from "firebase/firestore"; useEffect(() => { onSnapshot(doc(db, "rooms", roomId), (doc) => { setRoomName(doc.data().name) }); const q = query(collection(db, "rooms", roomId, "messages"), orderBy("timestamps")); onSnapshot(q, (querySnapshot) => { setMessages(querySnapshot.docs.map(doc => doc.data())) }); }, [roomId])También echa un vistazo:
¡Este debería hacer el trabajo!
useEffect(() => { if(roomId){ onSnapshot(doc(db, "rooms", roomId), (document) =>{ setRoomName(document.data().name); }); const msgColl = query(collection(db, "rooms", roomId, "messages"), orderBy("timestamp")); onSnapshot(msgColl, (querySnapshot) => { setMessages(querySnapshot.docs.map(msg => msg.data())) }); } }, [roomId])Esto es solo para otros....
V8:
export const fetchAccountAssets = (userID, accountID) => db() .collection('Accounts') .doc(userID) .collection('Assets') .get() .then((querySnapshot) => querySnapshot);V9:
export const fetchAccountAssets = async (userID, accountID) => { return await getDocs(collection(db, 'Accounts', userID, 'Assets')); }No creo que tenga que esperar aquí, pero bueno...