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

88
Visualizações
Los datos de Firestore no aparecen

En mi gancho personalizado, obtengo todas las imágenes de la colección firestore. Eso funcionó bien HASTA que intenté obtener también metadatos de imágenes. Cuando agregué la función getMetaData, no puedo configurar los datos para indicar que incluso los datos parecen estar bien en una matriz. Vea el código por favor.

 import { useState, useEffect } from "react"; import { firebaseFireStore } from "../firebase/config"; import { storage } from "../firebase/config"; import { ref, getMetadata } from "firebase/storage"; const useFirestore = (collection) => { const [docs, setDocs] = useState([]); useEffect(() => { const unsub = firebaseFireStore .collection(collection) .onSnapshot((snap) => { let documents = []; snap.forEach((doc) => { const forestRef = ref(storage, doc.data().url); getMetadata(forestRef) .then((metadata) => { documents.push({ ...doc.data(), metadata, id: doc.id }); return documents; }) .catch((error) => { console.log(error); }); }); setDocs(documents); console.log(docs); // [] EMPTY ARRAY, PROBLEM IS HERE. console.log(documents); // [] length:13 data is complete inside. }); return () => unsub(); // this is a cleanup function that react will run when // a component using the hook unmounts }, []); return { docs }; }; export default useFirestore;

Por lo tanto, incluso si la matriz de documentos tiene los datos con metadatos, no se puede establecer en el estado de los documentos. Cualquier ayuda apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

No puede registrar el estado de los docs justo después de poner en cola una actualización de estado, ya que React procesa las actualizaciones de estado de forma asincrónica. Pero este no es exactamente su problema o lo que realmente está tratando de resolver. El código está mapeando sobre la instantánea y poniendo en cola una solicitud asíncrona para recuperar metadatos y mutando asíncronamente la matriz de documents que se actualizó en React hace mucho * tiempo. console.log(documents) solo expone esta mutación más adelante cuando el navegador procesa el búfer de registro.

Para resolverlo, sugiero declarar la devolución de llamada snapshot.forEach async para que pueda esperar a que se resuelva la llamada getMetadata . Use una actualización de estado funcional para fusionar superficialmente cada documento a medida que se resuelve con metadatos.

Ejemplo:

 useEffect(() => { const unsubscribe = firebaseFireStore .collection(collection) .onSnapshot((snap) => { snap.forEach(async (doc) => { try { const forestRef = ref(storage, doc.data().url); const metadata = await getMetadata(forestRef); setDocs(documents => [ ...documents, { ...doc.data(), metadata, id: doc.id } ]); } catch(error) { console.log(error); }; }); }); return unsubscribe; }, []);

* "Hace mucho tiempo" -> algún ciclo de render anterior.

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