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

210
Vistas
REACT JS - Firebase: tipo de datos NÚMERO

Pregunta simple y rápida (y sí, lo busqué en Google primero, me confundieron con la verificación del número de teléfono y otras cosas), ¡de todos modos! de vuelta al punto

¿Por qué cuando ingreso datos y los envío a la base de datos, almacena todo como una cadena a pesar de que configuré el tipo de esa entrada como un 'número'?

Fragmento de ejemplo de código

 //some code that makes sense (and is working so far except for the data type) docRef.set({ precio: precio }) //Some more code that makes sense as well <input onChange = {(e) => {setPrecio(e.target.value);}} type = 'number' pattern = "[0-9]*" required placeholder="Precio" />

Entonces, básicamente, envío algunos datos a Firebase y hace una colección si no hay ninguno y un documento con los datos que estoy enviando, ahora el problema es que los datos se configuran como una cadena y los quiero como un número entonces Puedo usar ese valor más tarde para hacer algunas matemáticas inteligentes, supongo.

ingrese la descripción de la imagen aquí

Código completo de los bits importantes

 //Relevant variable const [precio, setPrecio] = useState(""); // Sending all the data I have gathered to the database const register = (e) => { e.preventDefault(); const docId = `${grado} | ${descripcion}`; const docRef = db.collection('libros').doc(docId); console.log(typeof precio) docRef.get().then((doc) => { if (doc.exists) { window.alert("Ya existe ese libro") } else { docRef.set({ materia: materia, descripcion: descripcion, editorial: editorial, grado: grado, precio: precio, id: docRef.id }).then((r) => { window.alert("Libro agregado") })} }) } //The bad boy number that still wants to get printed as a string <div className = "CrearE_row"> <input onChange = {(e) => {setPrecio(e.target.valueAsNumber);}} type = 'number' pattern = "[0-9]*" required placeholder="Precio" /> </div>
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo más probable es que esté enviando datos de tipo String, incluso si solo contienen números. Esto es bastante clásico cuando ingresa datos a través de un formulario HTML.

Puede verificar eso con el operador typeof , de la siguiente manera:

 console.log(typeof precio); docRef.set({ precio: precio })

La consola probablemente imprimirá "cadena". Por lo tanto, debe convertir el valor de precio en un número, por ejemplo, con parseInt() , parseFloat() o Number() .


Puedes ver con el siguiente código que si pasas un número, se guarda correctamente en la BD.

 const precio = 1234; // We declare a number console.log(typeof precio); docRef.set({ precio: precio })

Apéndice:

Como se explica en esta respuesta SO , también podría usar e.target.valueAsNumber en lugar de e.target.value .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cualquiera que todavía se pregunte entonces, tuve el mismo problema pero usé "parseInt ()" mientras lo enviaba a la base de fuego usando addDoc. Esperemos que esto lo aclare. Y gracias a Renaud.

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