Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

500
Visualizações
¿Cómo obtener todos los documentos en una colección en firestore?

Estoy tratando de obtener todos los documentos en mi colección, pero el registro devuelve una matriz vacía y recibo un mensaje de error que dice que no se puede leer la propiedad de lectura indefinida para cada uno. He seguido la documentación pero no puedo encontrar dónde está el problema. ¿Puede alguien ayudar, por favor? El fragmento de código a continuación es un enlace personalizado que estoy usando en mi index.js según lo siguiente. este registro devuelve una matriz vacía.

 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 }; }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

La instantánea de la consulta, si no me equivoco, es el valor de retorno que esperaba cuando llamó a getDocs . También está redeclarando la matriz de document cada vez que en la devolución de llamada forEach , debe declararse fuera del ciclo, junto con la función de actualización de estado setDocs .

 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 }; }
about 4 years ago · Juan Pablo Isaza Relatório

0

La respuesta de Drew te da los documentos una vez, así que 🔼.

Sin embargo, si desea escuchar las actualizaciones de los documentos y mostrarlas en su interfaz de usuario, use onSnapshot en lugar de 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]) }

Este:

  • Utiliza onSnapshot en lugar de getDocs para que también escuche las actualizaciones de los datos.
  • Ya no devuelve la variable de estado de docs , ya que parece propenso a errores.
  • Ahora devuelve correctamente una función que cancela la suscripción del oyente onSnapshot .
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda