Revisa patrones para diseñar APIs de componentes flexibles mediante composición, controlled props, compound components, render props y separación de responsabilidades.
<Tabs value={tab} onValueChange={setTab}><Tabs.List aria-label="Secciones del producto"><Tabs.Trigger value="details">Detalles</Tabs.Trigger><Tabs.Trigger value="reviews">Reseñas</Tabs.Trigger></Tabs.List><Tabs.Content value="details">...</Tabs.Content><Tabs.Content value="reviews">...</Tabs.Content></Tabs>
El componente raíz puede distribuir state e IDs mediante Context. Las piezas deben validar que se usan dentro del provider y conservar teclado, roles y relaciones accesibles.
Render props permiten que el componente controle el proceso y el consumidor el resultado visual. Custom hooks suelen reducir anidamiento cuando no necesitas una frontera de árbol. Render props siguen siendo útiles para componentes que aportan contexto, medición o comportamiento alrededor del contenido.
El getter puede fusionar handlers, IDs y ARIA. Debe definir qué ocurre si el consumidor también pasa onClick y en qué orden se ejecutan. Sin reglas claras, el spreading puede sobrescribir comportamiento crítico.
Un componente puede poseer state o delegarlo. Cuanta más flexibilidad, mayor superficie de API, documentación y tests. No ofrezcas todas las variantes antes de existir consumidores reales.
Pero una separación extrema puede hacer que cada uso deba reconstruir accesibilidad. Una primitive bien diseñada ofrece defaults seguros y personalización controlada.
frente a exponer setters o eventos DOM cuando el consumidor no necesita esos detalles. Si la API envuelve un elemento nativo, puede conservar también sus eventos estándar.