voltar

Organizando importações de componentes no shadcn/ui

A biblioteca shadcn/ui se destaca como uma das mais populares atualmente. Com componentes lindamente projetados que você pode copiar e colar diretamente em seus aplicativos, ela tem se tornado a escolha preferida em muitos projetos.

Pessoalmente, já utilizei essa biblioteca em diversos trabalhos, incluindo o meu portfólio—o próprio lugar de onde você está lendo isso agora. A variedade e a qualidade dos componentes são tão atraentes que é tentador utilizá-los em cada oportunidade. Quanto maior o projeto, mais shadcn/ui.

No entanto, em alguns projetos onde abusei do uso de shadcn/ui, acabei enfrentando uma situação caótica na minha tela. Sem que eu percebesse, um verdadeiro "shadcn-calipse" tomou conta do meu ambiente de trabalho. Embora não interferisse diretamente no funcionamento do projeto, era desconfortável ver minha tela repleta de importações.


 
    import { Badge } from "@/components/ui/badge";
    import { Button } from "@/components/ui/button";
    import { Input } from "@/components/ui/input";
    import {
        Table,
        TableBody,
        TableCell,
        TableHead,
        TableHeader,
        TableRow,
    } from "@/components/ui/table";
    import {
        DialogTrigger,
        DialogTitle,
        DialogHeader,
        DialogContent,
        Dialog,
    } from "@/components/ui/dialog";
    ...
 

Imagine só: cerca de 100 linhas de importações antes mesmo de chegar ao código principal.

Centralizando as importações

Para resolver essa desordem, optei por uma solução simples: criar um novo arquivo. Não se trata de nada complicado, mas sim de um pequeno ajuste que faz uma grande diferença. Começo criando um arquivo index.tsx na pasta /components/ui e movo todas as minhas importações para lá.

Depois, crio um objeto com um nome sugestivo — que tal shadcn? Em seguida, adiciono todos os componentes a esse objeto.


 
    import { Badge } from "@/components/ui/badge";
    import { Button } from "@/components/ui/button";
    import { Input } from "@/components/ui/input";
 
    export const shadcn = {
        Badge,
        Button,
        Input,
        ...
    };
 

Assim, ao invés de lidar com inúmeras linhas de importações em vários arquivos, importo apenas o objeto shadcn e uso os componentes como propriedades desse objeto:


 
    import { shadcn } from "@/components/ui";
 
    ...
 
    <shadcn.Button>
        Click
    </shadcn.Button>
 
    ...
 

Embora essa abordagem não elimine completamente o "apocalipse das importações", ela o centraliza em um único lugar, tornando o código mais limpo e fácil de gerenciar.