Formularios controlados en React: fuente única de verdad

Domina inputs controlados para construir formularios predecibles, validables y fáciles de mantener en aplicaciones reales.

Un formulario controlado significa que el valor visual de cada input vive en el estado de React, no en el DOM como fuente principal.

Este enfoque aporta trazabilidad: sabes en todo momento qué dato hay en cada campo y en qué momento cambió.

La contrapartida es que debes modelar bien el estado para no crear handlers caóticos al crecer el formulario.

En equipos, los formularios controlados facilitan validación, testing y reutilización de componentes de campo.

  • Debe recibir su valor desde estado y notificar cambios vía `onChange`.
  • Si usas `value={estado}` pero no actualizas en `onChange`, el input queda bloqueado.
  • Si usas `defaultValue`, el input arranca con un valor pero deja de estar bajo control total de React.
  • Para flujos robustos de negocio, lo habitual es usar inputs controlados salvo casos concretos.
  • En formularios medianos conviene centralizar campos en un único objeto de estado.

Qué convierte un input en controlado

Debe recibir su valor desde estado y notificar cambios vía `onChange`.

Si usas `value={estado}` pero no actualizas en `onChange`, el input queda bloqueado.

Si usas `defaultValue`, el input arranca con un valor pero deja de estar bajo control total de React.

Para flujos robustos de negocio, lo habitual es usar inputs controlados salvo casos concretos.

Estado de formulario como objeto

En formularios medianos conviene centralizar campos en un único objeto de estado.

Submit y prevención de recarga

En React, el envío del formulario se gestiona con `onSubmit` y `event.preventDefault()`.

Sin `preventDefault`, el navegador recarga la página y pierdes estado local.

Es buena práctica validar y normalizar datos justo antes del envío.

Mantén lógica de submit separada de render para que el componente siga legible.

  • Capturar evento submit.
  • Evitar refresh de navegador.
  • Validar datos antes de enviar.
  • Gestionar feedback de éxito/error.
React
11

Formularios controlados en React: fuente única de verdad

Domina inputs controlados para construir formularios predecibles, validables y fáciles de mantener en aplicaciones reales.

Código del tema: const form = useForm();

📘 Teoría

Qué convierte un input en controlado

Debe recibir su valor desde estado y notificar cambios vía `onChange`.

1

Si usas `value={estado}` pero no actualizas en `onChange`, el input queda bloqueado.

2

Si usas `defaultValue`, el input arranca con un valor pero deja de estar bajo control total de React.

3

Para flujos robustos de negocio, lo habitual es usar inputs controlados salvo casos concretos.

Estado de formulario como objeto

En formularios medianos conviene centralizar campos en un único objeto de estado.

Manejo de múltiples campos
import { useState } from 'react';

function SignupForm() {
  const [form, setForm] = useState({
    nombre: '',
    email: ''
  });

  const onChange = (e) => {
    const { name, value } = e.target;
    setForm((prev) => ({ ...prev, [name]: value }));
  };

  return (
    <>
      <input name="nombre" value={form.nombre} onChange={onChange} />
      <input name="email" value={form.email} onChange={onChange} />
    </>
  );
}

Submit y prevención de recarga

En React, el envío del formulario se gestiona con `onSubmit` y `event.preventDefault()`.

Sin `preventDefault`, el navegador recarga la página y pierdes estado local.

Es buena práctica validar y normalizar datos justo antes del envío.

Mantén lógica de submit separada de render para que el componente siga legible.

  • Capturar evento submit.
  • Evitar refresh de navegador.
  • Validar datos antes de enviar.
  • Gestionar feedback de éxito/error.

🧪 Aprende probando

Ejemplo Ejemplo: login controlado Dos campos controlados con actualización centralizada y submit gestionado.

🏁 Retos

Reto Reto: conecta el input de nombre Completa el input para que use estado controlado del campo `nombre`.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre React.

Test de React

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .