En un componente controlado el estado de React es la fuente de verdad: el input lee su valor del estado y cada pulsación pasa por onChange. En un componente no controlado el DOM guarda el valor y tú lo lees con una ref o desde los datos del formulario al enviarlo. Controlado te da validación en vivo y UI derivada; no controlado significa muchos menos renders y menos código en formularios grandes.
Por qué lo preguntan los entrevistadores
El entrevistador comprueba que sabes dónde vive el estado de verdad y que no eliges controlado para todo por costumbre. También quiere conciencia del coste, porque un input controlado vuelve a renderizar su subárbol con cada tecla, lo cual está bien con tres campos y duele con ochenta. Una respuesta moderna menciona las form actions y las librerías que dejan los inputs no controlados a propósito.
Cómo estructurar tu respuesta
- Define ambos según dónde vive el valor.
- Di qué te da cada uno, validación en vivo frente a menos renders.
- Da tu opción por defecto y el punto en el que cambias.
- Menciona las form actions o una librería de formularios y por qué tiran a no controlado.
Ejemplo de respuesta
Controlado significa que React es dueño del valor: value sale del estado, onChange lo escribe de vuelta y el input no puede cambiar sin un render. No controlado significa que el dueño es el DOM y yo solo lo leo cuando lo necesito, con una ref o desde los datos del formulario enviado. Mi opción por defecto en formularios pequeños es controlado, porque normalmente quiero validar mientras el usuario escribe o tengo un campo que depende de otro. En cuanto un formulario pasa de unos quince o veinte inputs, o en cuanto tengo un campo que dispara un re-render caro con cada tecla, me paso a no controlado y valido en blur y al enviar. Eso es también lo que hacen por debajo las librerías de formularios populares: registran los inputs y se suscriben de forma acotada en lugar de volver a renderizar el formulario entero. Con las form actions de React 19 tiro todavía más a no controlado, porque la action recibe el FormData gratis, así que para un formulario simple de crear o editar puedo saltarme el estado por completo y gestionar solo los estados de pendiente y error con useActionState.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cuál es el aviso que da React cuando un input pasa de no controlado a controlado, y por qué?
- ¿Cómo validarías al enviar un formulario no controlado?
- ¿Cómo cambian tu enfoque las form actions de React 19?
Más preguntas para Desarrollador React
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas