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

172
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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