Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

627
Vistas
FirebaseError: Llamada a la función addDoc() con datos no válidos. Valor de campo no admitido: indefinido

así que aquí quiero almacenar la URL de la imagen del almacenamiento de firebase en firestore. Recibo un error de indefinido porque mi setImgUrl no está definido. Por favor ayúdame a solucionar esto.

 import React, { useState } from "react"; import "../mainTab.css"; import "./addScreen.css"; import firebase, { storage } from "../firebase"; const AddScreen = () => { const db = firebase.firestore(); const [cat, setCat] = useState(); const [course, setCourse] = useState(); const [name, setName] = useState(); const [price, setPrice] = useState(); const [descrip, setDescrip] = useState(); const [image, setImage] = useState(); const [imgURL, setImgURL] = useState(); const onSubmitHandler = (event) => { event.preventDefault(); const ref = storage.ref(`/images/${image.name}`); const uploadTask = ref.put(image); uploadTask.on("state_changed", console.log, console.error, () => { ref.getDownloadURL().then((url) => { setImage(null); setImgURL(url); console.log(imgURL); }); }); const data = { name: name, price: price, cat: cat, course: course, decription: descrip, image: imgURL, }; db.collection("menu") .doc(course.toString()) .collection(name.toString()) .add(data) .then(() => alert("menu item is posted")) .catch((error) => alert("error: " + error)); setName(""); setPrice(""); setCat(""); setCourse(""); setImage(""); setDescrip(""); };

Necesito la URL de img en el enlace setImg. Entonces, ¿hay alguna forma de que después de completar la carga deba llamar a la función de escritura de la base de datos (intento con un gancho de bandera (falso) que no ayudó? por la imagen se carga perfectamente bien en el almacenamiento de Firebase

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

intente poner esta parte dentro de una función y luego llame a esa función dentro de 'entonces', por ejemplo

 const putUrl = ()=>{ db.collection("menu") .doc(course.toString()) .collection(name.toString()) .add(data) .then(() => alert("menu item is posted")) .catch((error) => alert("error: " + error)); setName(""); setPrice(""); setCat(""); setCourse(""); setImage(""); setDescrip(""); }

y ahora llame a putUrl en 'then()' de esta manera, esta parte del código se ejecutará solo después de que se obtenga 'imgUrl'. Obtuvo un error porque obtener 'imgUrl' y agregar datos son asincrónicos y se ejecutarán antes de que se obtenga 'imgUrl'

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cualquier código que necesite la URL de descarga de Firebase, debe estar dentro de la devolución de llamada then ser llamado desde allí o sincronizado para ejecutarse una vez que imgURL esté configurado de alguna otra manera.

La forma más sencilla de corregir su código es mover el código que then escribe en Firestore al bloque de esta manera:

 const ref = storage.ref(`/images/${image.name}`); const uploadTask = ref.put(image); uploadTask.on("state_changed", console.log, console.error, () => { ref.getDownloadURL().then((url) => { setImage(null); setImgURL(url); console.log(imgURL); const data = { name: name, price: price, cat: cat, course: course, decription: descrip, image: url, // 👈 Use url here, as imgURL won't be set yet }; db.collection("menu") .doc(course.toString()) .collection(name.toString()) .add(data) .then(() => alert("menu item is posted")) .catch((error) => alert("error: " + error)); }); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda