12k
All articles

Cuándo No Necesitas una Librería de Componentes

Por qué CSS utilitario y primitivas headless suelen superar a las bibliotecas de componentes en 2026, con una lista para decidir.

OpenReplay Team
OpenReplay Team
Cuándo No Necesitas una Librería de Componentes

Para la mayoría de los proyectos pequeños, altamente personalizados o con restricciones de rendimiento en 2026, no necesitas una librería de componentes — necesitas CSS utilitario para el layout y primitivas headless para los tres o cuatro comportamientos interactivos que son genuinamente difíciles de implementar. Una librería con estilos completos como MUI, Ant Design o Chakra justifica su peso solo bajo condiciones específicas: consistencia entre múltiples equipos, herramientas internas donde la velocidad de entrega supera a la identidad de marca, o la ausencia de un recurso de diseño dedicado. Fuera de esos casos, los costos en bundle, personalización y apariencia genérica suelen superar los beneficios. Este artículo te ofrece el marco de decisión — los costos reales de recurrir a una librería por defecto, los casos en que genuinamente no la necesitas, los casos en que sí, y una escalera concreta desde “nada” hasta “librería completa” para que elijas el peldaño más bajo que resuelva tu problema real.

El reencuadre clave desde el principio: “no uses una librería de componentes” nunca ha significado “construye tus propios dropdowns desde cero.” Significa CSS utilitario más primitivas headless probadas en producción para los comportamientos que son difíciles de implementar correctamente.

Puntos Clave

  • El enfoque moderno por defecto para la mayoría de los proyectos es CSS utilitario para los estilos más primitivas headless — no una librería de componentes con estilos completos ni widgets interactivos construidos a mano.
  • Recurre a una librería con estilos completos solo cuando necesitas consistencia entre múltiples equipos, estás entregando herramientas internas donde la velocidad supera a la marca, o no tienes un recurso de diseño dedicado.
  • Reach UI actualmente no tiene mantenimiento activo, por lo que cualquier recomendación de 2026 que sugiera usarlo es incorrecta — el rol de primitivas accesibles ahora pertenece a Radix Primitives y React Aria de Adobe.
  • La parte más costosa de un dropdown construido a mano no es el marcado; son la navegación por teclado, el atrapamiento del foco, el cierre al hacer clic fuera y los anuncios para lectores de pantalla que una primitiva headless proporciona por defecto.
  • Tailwind CSS v4.0 es una versión mayor del framework CSS utilitario, publicada el 22 de enero de 2025, lo que convierte al CSS utilitario en un punto de partida realista para la capa de estilos.

Los costos reales de recurrir a una librería de componentes por defecto

Una librería de componentes completa conlleva tres costos que se acumulan a lo largo de la vida de un proyecto: peso del bundle, fricción en la personalización y uniformidad visual. Ninguno de ellos es un factor decisivo por sí solo, pero juntos explican por qué incorporar MUI en un sitio de marketing o en una aplicación de cinco pantallas suele ser un mal negocio.

Peso del bundle. Una librería monolítica con estilos incluye una base de CSS y JavaScript — runtime de tematización, registro de componentes, design tokens — que se carga independientemente de si renderizas tres componentes o treinta. El tree-shaking ayuda, pero solo donde la librería es genuinamente modular. Los paquetes por componente hacen tree-shaking correctamente; el paquete radix-ui admite tree-shaking, por lo que solo deberías enviar los componentes que uses. Las cargas monolíticas de temas y estilos no reducen su peso de la misma manera, porque el runtime es una dependencia compartida que cada componente importa. La versión honesta del argumento “el tree-shaking lo resuelve”: funciona para primitivas modulares, no para una librería cuyo motor de estilos es un único runtime.

Fricción en la personalización. Si el diseño de un proyecto es genérico y de corta duración, una librería lista para usar gana sin discusión. Si el diseño es distintivo y de larga duración, cada componente con estilos que importas se convierte en una batalla de especificidad que librarás durante toda la vida del proyecto — sobreescribiendo selectores anidados, peleando contra los valores por defecto del tema y envolviendo componentes para adaptarlos a tu marca.

Apariencia genérica. Los valores por defecto de las librerías son neutros por diseño. Una marca distintiva implica sobreescrituras intensas, lo que vuelve al costo de personalización. Cuanto más se aleje tu diseño de las decisiones de la librería, más tiempo pasarás luchando contra ella en lugar de usarla.

Cuándo no necesitas una librería de componentes

No necesitas una librería de componentes cuando la interfaz es mayormente estática, el diseño es distintivo o el rendimiento es una restricción estricta. Estos son los proyectos donde una librería es pura sobrecarga.

  • Landing pages, blogs y portfolios. Principalmente tipografía, layout y algunos elementos interactivos. El CSS utilitario cubre los estilos; rara vez necesitas más que un puñado de componentes interactivos.
  • Aplicaciones con marca fuerte. Cuando el diseño es la identidad del producto, los valores por defecto de una librería trabajan en tu contra. Construir desde clases utilitarias y un pequeño conjunto de componentes propios te da control total sin tener que pelear contra las decisiones de otro.
  • Aplicaciones con restricciones de rendimiento. Cuando cada kilobyte y cada milisegundo de latencia de interacción importan, incluir el runtime de una librería con estilos para unos pocos botones es el enfoque equivocado.
  • Equipos que usan Tailwind. Si tu equipo ya aplica estilos con clases utilitarias, una librería con estilos duplica la capa de estilos y crea dos fuentes de verdad en competencia sobre cómo deben verse las cosas.

Una distinción útil aquí: una librería de componentes es una colección de elementos de interfaz listos para usar; un sistema de diseño es el marco más amplio de principios, tokens y reglas de uso que los rodea. Puedes necesitar lo segundo sin comprar lo primero — un conjunto de design tokens en propiedades personalizadas de CSS más clases utilitarias te da consistencia sin importar los componentes de nadie.

Cuándo sí necesitas una

Recurre a una librería con estilos completos cuando la velocidad y la consistencia a escala importan más que la distintividad de la marca o el tamaño del bundle. Cuatro situaciones lo justifican:

  • Herramientas internas y paneles de administración. Nadie juzga un panel CRUD de back-office por su identidad visual. Una librería que te proporciona tablas, formularios, modales y selectores de fecha desde el primer momento es el camino más rápido para entregar.
  • MVPs y prototipos. Cuando el objetivo es validar una idea antes de invertir en diseño, los componentes listos para usar te permiten avanzar rápido y descartar sin costo.
  • Consistencia empresarial entre múltiples equipos. Cuando muchos equipos contribuyen a un mismo producto, una librería compartida impone una apariencia uniforme y una única ruta de actualización — corrige un componente una vez y todos los consumidores heredan el cambio.
  • Sin recurso de diseño dedicado. Si no hay diseñador ni sistema de diseño, los valores por defecto razonables de una librería son mejores que lo que la mayoría de los equipos producirá de manera improvisada.

El hilo conductor: en cada caso, los valores por defecto con criterio propio de la librería son una ventaja, no una restricción contra la que lucharás.

La escalera de decisión: de nada a una librería de componentes completa

En lugar de un binario “librería o no librería,” piensa en peldaños. Cada peldaño añade capacidad y costo; sube solo hasta donde tus necesidades reales lo requieran. Esto moderniza el clásico espectro de construir-vs-comprar.

PeldañoA qué recurresCuándo usarlo
1. Nada adicionalHTML + CSS puro, pequeños componentes reutilizablesInterfaz estática o casi estática, control total del diseño
2. CSS utilitarioTailwind CSS v4 + design tokensQuieres velocidad en los estilos sin abandonar CSS
3. Primitivas headlessRadix, React Aria, Headless UI, Ark UINecesitas dropdowns, diálogos y comboboxes accesibles
4. Componentes de propósito únicoreact-select, un date picker, un editor de texto enriquecidoUn widget genuinamente difícil, no un kit de interfaz completo
5. Librería con estilos completosMUI, Ant Design, Chakra UIHerramientas internas, consistencia empresarial, sin diseñador

Peldaño 2 — CSS utilitario. Tailwind es el punto de partida realista para la capa de estilos y layout. Tailwind CSS v4.0 es una versión completamente nueva del framework, optimizada para rendimiento y flexibilidad, con una experiencia de configuración y personalización reimaginada. El cambio arquitectónico principal: Tailwind CSS v4 es una herramienta todo-en-uno para procesar tu CSS, con Lightning CSS integrado directamente en el framework para que no tengas que configurar nada en tu pipeline de CSS. La configuración se trasladó de tailwind.config.js a CSS mediante la directiva @theme. Las versiones de parche avanzan rápido, así que fija una versión en tu proyecto en lugar de memorizar una; v4 es la versión actual a junio de 2026.

Peldaño 3 — primitivas headless. Este es el peldaño que los consejos más antiguos de “no uses una librería” subestiman, y el que más importa. Las primitivas headless te proporcionan el comportamiento accesible de un componente interactivo — manejo de teclado, gestión del foco, cableado ARIA — sin ningún estilo, para que aportes tus propias clases utilitarias.

Radix Primitives es la opción de referencia: una librería de componentes de interfaz de bajo nivel centrada en la accesibilidad, la personalización y la experiencia del desarrollador; una librería de componentes de interfaz de código abierto para construir sistemas de diseño y aplicaciones web de alta calidad y accesibles, mantenida por WorkOS. Ofrece primitivas para patrones de interfaz comunes como diálogos, dropdowns, popovers y tooltips, todos construidos con cumplimiento WAI-ARIA para garantizar soporte para lectores de pantalla y navegación por teclado. Para equipos que trabajan con múltiples frameworks, Ark UI (construido sobre máquinas de estado de Zag.js, con paridad en React/Vue/Solid/Svelte) cubre el mismo terreno en distintos frameworks. Si trabajas con React, React Aria de Adobe y Headless UI de Tailwind Labs (que admite React y Vue) son opciones equivalentes.

Una corrección que vale la pena mencionar explícitamente: evita Reach UI en 2026. Reach UI actualmente no tiene mantenimiento activo. Su mantenedor declaró “bancarrota de OSS” en 2022, y desde que se introdujo Reach, otros han construido componentes de bajo nivel, componibles y accesibles, con varias librerías bien mantenidas para considerar en su lugar — Radix y React Aria entre las principales. Cualquier artículo que siga recomendando Reach UI para “los casos difíciles” te está apuntando hacia una dependencia abandonada.

Peldaño 4 — componentes de propósito único. Cuando un widget es genuinamente difícil — un multi-select con búsqueda, un selector de rango de fechas, un editor de texto enriquecido — incorpora un paquete dedicado y probado en producción para ese único elemento, en lugar de adoptar un kit de interfaz completo para obtenerlo.

También vale la pena señalar que la plataforma ha absorbido problemas que antes requerían una librería. En React 19, el soporte para usar funciones asíncronas en transiciones maneja automáticamente estados pendientes, errores, formularios y actualizaciones optimistas, y las nuevas acciones de formulario junto con las APIs useActionState, useFormStatus, useOptimistic y use() reducen el argumento de “necesitas una librería de formularios para esto” en toda una clase de formularios. Tener menos razones para subir la escalera es una ventaja.

El costo oculto de construir componentes interactivos a mano

La razón por la que “no uses una librería” no debe colapsar en “construye todo tú mismo” es la accesibilidad y el comportamiento en casos límite. La parte más costosa de un dropdown construido a mano no es el marcado — son la navegación por teclado, el atrapamiento del foco, el cierre al hacer clic fuera y los anuncios para lectores de pantalla que una primitiva headless te proporciona de forma gratuita.

Este es precisamente el vacío que describen los autores de Radix: las implementaciones que la plataforma web proporciona para estos patrones son inadecuadas — inexistentes, con funcionalidad limitada o sin suficiente capacidad de personalización — por lo que los desarrolladores se ven obligados a construir componentes personalizados, una tarea increíblemente difícil, y como resultado la mayoría de los componentes en la web son inaccesibles, tienen bajo rendimiento y carecen de funcionalidades importantes.

Los fallos de accesibilidad en componentes interactivos construidos a mano son la clase de error que la reproducción de sesiones pone en evidencia en producción. Ver reproducciones de controles construidos a medida es donde el verdadero costo de “simplemente constrúyelo tú mismo” se vuelve visible: un usuario de teclado cuyo foco escapa de un modal personalizado y aterriza en la página detrás de él; un usuario móvil que toca repetidamente un dropdown que no se cierra porque no hay manejo de clic exterior ni de la tecla Escape; un combobox que nunca anuncia sus opciones a un lector de pantalla, por lo que el usuario se rinde. Estos son exactamente los comportamientos que una primitiva headless maneja por defecto — y exactamente los comportamientos que un componente construido a mano silenciosamente implementa mal hasta que alguien observa a un usuario real luchando con él.

La conclusión no es “usa siempre una primitiva.” Es que el costo de los componentes interactivos DIY se paga después, en errores de accesibilidad e interacciones abandonadas, no por adelantado en el marcado. Considera ese costo antes de decidir construirlo a mano.

Una lista de verificación para la decisión

Evalúa un proyecto con estas cinco preguntas antes de elegir un peldaño:

  1. Vida útil. ¿Prototipo desechable o producto de varios años? Los proyectos de corta duración favorecen los componentes listos para usar; los de larga duración favorecen tener el control de tu propia capa de estilos.
  2. Distintividad de la marca. ¿Genérico y basado en plantillas, o una identidad distintiva? Un diseño distintivo convierte a una librería con estilos en un lastre.
  3. Tamaño del equipo. ¿Un equipo o muchos contribuyendo a un mismo producto? La consistencia entre múltiples equipos es el argumento más sólido para una librería compartida.
  4. Presupuesto de rendimiento. ¿El tamaño del bundle o la latencia de interacción son restricciones estrictas? Si es así, prefiere CSS utilitario más primitivas por componente sobre un runtime monolítico.
  5. Quién lo mantiene. ¿Tienes un diseñador y la capacidad de mantener una capa personalizada? La ausencia de un recurso de diseño te empuja hacia los valores por defecto razonables de una librería.

Si la mayoría de las respuestas apuntan a “corta duración, genérico, múltiples equipos, sin diseñador,” sube al peldaño 5. Si apuntan a “larga duración, distintivo, un equipo, presupuesto de rendimiento ajustado,” quédate en los peldaños 2 y 3.

Conclusión

El punto de partida para el nuevo trabajo de frontend en 2026 es CSS utilitario para los estilos y primitivas headless para el puñado de interacciones que son difíciles de implementar correctamente — subiendo a una librería con estilos completos solo cuando la consistencia a escala, la velocidad de entrega o la ausencia de un recurso de diseño convierten sus valores por defecto con criterio propio en una ventaja. Antes de ejecutar npm install en un kit de interfaz por inercia, recorre la lista de verificación de cinco preguntas y elige el peldaño más bajo que resuelva el problema que tienes delante. Construye con intención, no por costumbre — y deja que el proyecto, no el reflejo, decida cuánta librería realmente necesitas.

Preguntas Frecuentes

¿Cuál es la diferencia entre una librería de componentes headless y una librería de componentes con estilos?

Una librería headless como Radix Primitives, React Aria o Headless UI proporciona el comportamiento y la accesibilidad de un componente interactivo — navegación por teclado, gestión del foco, cableado ARIA — sin ningún estilo, por lo que tú aportas tu propio CSS o clases utilitarias. Una librería con estilos como MUI, Ant Design o Chakra UI incluye tanto el comportamiento como un diseño visual con criterio propio más un runtime de tematización. Las librerías headless intercambian conveniencia por control visual total y una huella de estilos más pequeña.

¿Se puede usar Tailwind CSS y una librería de componentes juntos en el mismo proyecto?

Sí, pero generalmente duplica la capa de estilos y crea dos fuentes de verdad en competencia sobre cómo deben verse las cosas. Una librería con estilos incluye su propio runtime de tematización, por lo que combinarla con Tailwind implica mantener ambos. La combinación más limpia es Tailwind para los estilos más una primitiva headless como Radix, React Aria o Ark UI, que no incluye estilos propios y está diseñada para ser estilizada con clases utilitarias.

¿Por qué ya no se recomienda Reach UI para componentes React accesibles?

Reach UI actualmente no tiene mantenimiento activo, según su repositorio oficial en GitHub. El mantenedor declaró bancarrota de OSS en 2022, y el proyecto no ha recibido desarrollo activo desde entonces. Cualquier guía de 2026 que recomiende Reach UI para dropdowns, tooltips u otros patrones interactivos difíciles te está apuntando hacia una dependencia abandonada. El rol de primitivas accesibles que una vez ocupó ahora pertenece a Radix Primitives y React Aria de Adobe, ambos mantenidos activamente con soporte completo de teclado y foco según WAI-ARIA.

¿Qué librería de componentes headless funciona en React, Vue, Solid y Svelte?

Ark UI es la opción agnóstica al framework, construida sobre máquinas de estado de Zag.js con paridad en React, Solid, Vue y Svelte. La mayoría de las primitivas headless son específicas de un framework: Radix Primitives y React Aria de Adobe están orientadas a React, mientras que Headless UI de Tailwind Labs admite React y Vue. Si necesitas lógica de componentes compartida entre múltiples frameworks en una misma organización, Ark UI está diseñado para ese caso, ya que el comportamiento subyacente reside en Zag.js en lugar de en un binding de un único framework.

Digital experience platform

Truly understand users experience

See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.