Controller, useController y register en react-hook-form

Guía en español para dominar register, Controller y useController con react-hook-form y shadcn, conectando headless y buenas prácticas de rendimiento.

8 sept 2025 • 4 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

Me crucé con react-hook-form al integrar el paquete de formularios de shadcn y me encontré con varios componentes utilitarios como Form, FormField, FormControl, FormLabel y FormMessage. Si te has sentido abrumado al combinar librerías headless como Radix con react-hook-form, aquí tienes una guía clara y práctica en español para entender cuándo usar register, Controller y useController y cómo hacer que todo conviva de forma limpia y escalable en proyectos de aplicaciones a medida.

Componente controlado vs no controlado

La diferencia clave es dónde se gestiona el estado. Si el DOM lleva el control del valor y accedes a él mediante ref, estás ante un componente no controlado. Si React guarda el valor en su estado y lo actualizas en respuesta a eventos, es un componente controlado. Esta distinción te ayudará a elegir la estrategia correcta en cada campo del formulario.

register

Con register el estado se mantiene en el DOM, por lo que el campo actúa como no controlado. Es la opción ideal para elementos nativos como input, select, textarea y checkbox. Ventajas habituales: menos re renders, mayor rendimiento, validación declarativa y un API muy simple. Usa register siempre que el valor del campo pueda mapearse a un value nativo de HTML sin transformaciones complejas.

Controller

Controller convierte el campo en controlado por React. Es la herramienta adecuada cuando el valor no encaja con un input nativo o requiere transformación. Ejemplos típicos: un Slider de rango con mínimo y máximo, un Rating, un Color Picker o fechas avanzadas. Imagina un selector de precios con dos manejadores; necesitas mapear los eventos de cada extremo a un valor compuesto, por ejemplo un array con [mínimo, máximo]. Controller te da acceso a value y onChange para moldear ese flujo con precisión.

useController

useController es la versión en hook de Controller. Te devuelve field y fieldState para integrarte en componentes personalizados sin inflar el JSX con componentes wrapper. Es especialmente útil al encapsular lógica de formularios en componentes reutilizables y minimizar el movimiento ocular al leer el JSX. Aun así, en pantallas con muchos campos, múltiples llamadas a useController pueden resultar verbosas; en esos casos, un Controller por campo puede mejorar la legibilidad.

register vs Controller reglas prácticas

Elige register cuando uses elementos nativos y no necesites transformar el valor. Si el componente es sofisticado o su valor es compuesto o no estándar, opta por Controller. Cuando estés creando un componente propio reusable y quieras mantener el JSX limpio, considera useController. Si varios componentes del mismo formulario comparten transformaciones complejas del valor, Controller suele simplificar el mantenimiento.

Integración con shadcn y librerías headless

Los helpers de shadcn como Form, FormField, FormControl, FormLabel y FormMessage son adaptadores que centralizan etiquetas, controles y mensajes de error, y que pueden trabajar tanto con register como con Controller. La clave es decidir en cada FormField si conectas directamente register o si inyectas control y las funciones de transformación necesarias. En componentes headless de Radix, Controller o useController suelen ser la mejor vía para sincronizar su estado interno con react-hook-form.

Cuándo preferir estado global en lugar del formulario

Si el valor debe ser conocido por toda la aplicación, es mejor sacarlo del formulario y gestionarlo en un contexto global. Un ejemplo clásico es el tema claro u oscuro: ese estado afecta a toda la UI y debe propagarse por contexto, no como un campo del formulario. Usa el formulario para datos del dominio y contexto para estados transversales como tema, autenticación o preferencias.

Rendimiento y buenas prácticas

register suele implicar menos re renders y es la opción más eficiente. Controller re renderiza el componente controlado y conviene memorizar subcomponentes cuando sea necesario. Define defaultValues coherentes con la estructura esperada del campo, evita alternar sin necesidad entre controlado y no controlado, y usa shouldUnregister cuando quieras limpiar valores al desmontar campos condicionales. Para campos compuestos, diseña una única fuente de verdad y centraliza la transformación en onChange.

Errores frecuentes y cómo evitarlos

Desajustes entre defaultValues y el tipo real de value, olvidar pasar control al usar Controller o useController, depender de estados de UI globales dentro del formulario cuando deberían ir a contexto, y no normalizar valores de componentes complejos como Sliders o Ratings. Aclara el contrato del valor desde el inicio y valida siempre el shape final que enviarás al backend.

Conclusión rápida

Usa register para inputs nativos y simples. Recurre a Controller cuando necesites control completo, transformación de valores o integración con componentes headless. Elige useController para encapsular lógica en componentes reutilizables sin sobredimensionar el JSX. Combina estas piezas con los helpers de shadcn para obtener formularios consistentes, accesibles y fáciles de mantener en productos de software a medida y aplicaciones a medida.

Sobre Q2BSTUDIO

En Q2BSTUDIO desarrollamos software a medida y aplicaciones a medida con foco en calidad, escalabilidad y experiencia de usuario. Integramos formularios complejos con react hook form, diseñamos APIs robustas y automatizamos procesos de negocio con agentes IA. Nuestro equipo también ofrece inteligencia artificial e ia para empresas, ciberseguridad y pentesting, servicios cloud aws y azure, además de servicios inteligencia de negocio y analítica avanzada con power bi. Si buscas un partner tecnológico que entienda tu producto y te ayude a acelerar su roadmap, descubre nuestro enfoque en el desarrollo de software y aplicaciones a medida.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.

Live Chat