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

179
Vistas
setState no funciona correctamente cuando se usa value={} en el campo de entrada

Estoy usando React JS. Estoy configurando el estado, sin embargo, hay un problema en la parte value={} del campo de entrada.

Aquí está mi código:

 import React from 'react'; class SomeClass extends React.Component{ constructor(props){ super(props); this.state = { passCode: { email: "Email", password: "Password" }, errorMessage: '' }; } handleChange = (event) =>{ console.log(`input detected`); let request = Object.assign({},this.state.passCode); request.email = event.target.value; request.password = event.target.value; this.setState({passCode: request}); } render() { return ( <form onSubmit={this.handleSubmit}> <label>Email Address</label> <input type="text" value={this.state.passCode.email} onChange={this.handleChange} placeholder="Enter Email Address" /> <label>Password</label> <input type="password" value={this.state.passCode.password} onChange={this.handleChange} placeholder="Enter One Time Password" /> <Button type="submit"> Sign In</Button> </form> ); } } export default SomeClass;

Mi pregunta:

Tengo es para el atributo de valor de los campos de entrada, creo que setState no funciona correctamente:

En el objeto passCode del estado. Cuando escribo el correo electrónico, ambos campos se configuran con lo que escribí en el campo de correo electrónico. Cuando escribo la contraseña, ambos campos se configuran con lo que escribí en el campo de contraseña.

¿Cuál es la razón de tal problema?

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

0

setState funciona correctamente; su handleChange no lo es. Está configurando tanto el email como la password en el valor de la entrada, independientemente de en qué entrada se haya producido el cambio. En su lugar, desea actualizar solo la propiedad relevante. Para hacer eso, agregaría atributos de name a los elementos de input ( name="email" y name="password" ), luego:

 handleChange = ({currentTarget: {name, value}}) =>{ console.log(`input detected`); this.setState(({passCode}) => { return {passCode: {...passCode, [name]: value}}; }); };

Bits clave que hay:

  • Solo actualiza la propiedad con la que se relaciona el change , manteniendo la otra sin cambios, utilizando el nombre de la entrada.
  • Utiliza la versión de devolución de llamada de setState (mejor práctica ya que estamos configurando el estado en función del estado existente).
about 4 years ago · Juan Pablo Isaza Denunciar

0

Su función handleChange es incorrecta. Debe actualizar así con el uso de name :

 handleChange = (event) => { console.log(`input detected`); const { name, value } = event.target; this.setState({ passCode: { ...this.state.passCode, [name]: value } }); };

Y establezca el name en la input :

 <input type="text" value={this.state.passCode.email} onChange={this.handleChange} placeholder="Enter Email Address" name="email" /> <input type="password" value={this.state.passCode.password} onChange={this.handleChange} placeholder="Enter One Time Password" name="password" />
about 4 years ago · Juan Pablo Isaza Denunciar

0

Los métodos que dieron son buenos, pero aun así sugiero que separes los métodos para cambiarlos, tal vez sea mucho mejor.

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