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

319
Vistas
React.js: e.preventDefault(…) no es una función

En mi proyecto, creé un componente que se encarga de los inicios de sesión. Devuelve un formulario y contiene un método de validación llamado onSubmit . Actualmente el método se ve así:

 import { useState } from "react" function Login({ onLogin }) { const [name, setName] = useState("") const [password, setPassword] = useState("") function onSubmit(e) { e.preventDefault() if (!name && !password) return alert("Please enter a username and a password!") if (!name) return alert("Please enter a username!") if (!password) return alert("Please enter a password!") onLogin({ name, password }) setName("") setPassword("") } }

Quería que todo se viera mejor y cambié las 3 declaraciones if con 2 operadores ternarios y una declaración if:

 import { useState } from "react" function Login({ onLogin }) { const [name, setName] = useState("") const [password, setPassword] = useState("") let missingData function onSubmit(e) { e.preventDefault() (!name && !password) ? missingData = "username and a password" : !name ? missingData = "username" : missingData = "password" if (!password || !name) return alert(`Please enter a ${missingData}!`) onLogin({ name, password }) setName("") setPassword("") } }

Sin embargo, tan pronto como intento esto, ocurre el siguiente error:

TypeError: e.preventDefault(...) no es una función

No tengo idea de cómo el uso de un ternario aquí está afectando el objeto del evento. Especialmente porque lo hice de manera similar en el componente Registro y no ocurrió ningún error.

La declaración de devolución del componente, incluido el formulario, se ve así:

 return ( <> <h3>Login</h3> <form onSubmit={onSubmit}> <label>Username</label> <input type="text" placeholder="Username" value={name} onChange={(e) => setName(e.target.value)} /> <label>Password</label> <input type="password" placeholder="Password" value={password} onChange={(e) => setPassword(e.target.value)} /> <input type="submit" value="Login" /> </form> </> )
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Como no está usando punto y coma, JavaScript está teniendo dificultades para determinar si la línea que contiene e.preventDefault() ha terminado y la está combinando con la siguiente línea.

Puede solucionar esto agregando un punto y coma en uno de dos lugares:

 function onSubmit(e) { e.preventDefault(); ...

o

 function onSubmit(e) { e.preventDefault() ;(!name && !password) ? missingData = "username and a password" : !name ? missingData = "username" : missingData = "password" ...

Puede encontrar una explicación adicional aquí, en "Comenzar una línea con un código que claramente no es una declaración nueva": https://www.learnbasicjs.com/do-i-need-semicolons-in-javascript/

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