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

130
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

0

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