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

126
Visualizações
Reaccionar useState almacenando la entrada del usuario en un objeto

Estoy tratando de crear un formulario usando grupos de entradas de radio que guardan sus valores en un solo objeto de estado.

El problema que tengo con el siguiente código es que el estado se está actualizando correctamente, pero los atributos de verificación de radio y las dos etiquetas de párrafo no se vuelven a representar para mostrar el nuevo texto. Si vuelvo a representar el componente con algún otro método, el texto se actualiza para coincidir con el estado.

Sé que en un mundo ideal tendría un useState() para cada grupo de radio, sin embargo, los datos que se usan para generar el formulario son dinámicos desde un servidor, por lo que no puedo predecir cómo se verá la forma del estado y yo necesita enviar la entrada como un objeto al servidor. He simplificado mi ejemplo, pero el problema es el mismo...

 import { useState } from 'react' const Form = () => { const [ data, setData ] = useState({}); const handleChange = (key, value) => { data[key] = value setData(data) } return ( <div> <h2>Form</h2> <p>Gender: { data.gender }</p> <p>Age: { data.age }</p> <form action=""> <label> Male <input type="radio" name="gender" checked={data['gender'] === 'male'} onChange={() => handleChange('gender', 'male')} /> </label> <label> Female <input type="radio" name="gender" checked={data['gender'] === 'female'} onChange={() => handleChange('gender', 'female')} /> </label> <label> Old <input type="radio" name="age" checked={data['age'] === 'old'} onChange={() => handleChange('age', 'old')} /> </label> <label> Young <input type="radio" name="age" checked={data['age'] === 'young'} onChange={() => handleChange('age', 'young')} /> </label> </form> </div> ); } export default Form;

Todavía soy relativamente nuevo para reaccionar, por lo que cualquier ayuda sería muy apreciada, ¡estoy seguro de que es algo bastante obvio que me estoy perdiendo!

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

solo está actualizando la clave en el objeto de datos y, por lo tanto, el objeto en sí mantendrá su referencia original. Esto no provocará una nueva representación ya que el estado real, el objeto data no ha cambiado.

Para que el componente se represente en la actualización de estado, puede hacer setData({...data, [key]: value});

about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que veo el problema.

dato[clave] = valor

Aquí, estás silenciando el estado directamente. En su lugar, intente algo como

 const newData ={}; newData[key] = value; setData(newData);

Cuando está haciendo setData a su manera, mira y ve que los datos ya son los mismos, por lo que no actualiza nada.

about 4 years ago · Juan Pablo Isaza Relatório

0

const handleChange = (key, value) => { setData({...data, key : value}) }
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