Integrando Composition Pattern em aplicações React
/ 7 min de leitura
Última Atualização:Introdução
Desenvolver e manter uma aplicação React em grande escala é frequentemente desafiador. É por isso que existem patterns que nos auxiliam na organização da estrutura do nosso aplicativo, facilitando a manutenção.
Hoje, vou apresentar um padrão que considero bastante eficaz o Composition Pattern utilizando React, com TypeScript, Tailwind CSS, Tailwind Merge para estilos personalizados e a inclusão da biblioteca de ícones Lucide.
Entendendo os fundamentos
Em vez de ficar preso em hierarquias complicadas e herança de componentes, o Composition Pattern destaca a ideia de construir componentes menores e especializados, cada um focado em uma tarefa específica.
- Composição sobre herança:
-
Enquanto a herança envolve criar classes base e derivadas, a composição enfatiza construir objetos compostos de outros objetos.
-
Reduz problemas relacionados à hierarquia de herança profunda, mantendo as coisas mais simples e compreensíveis.
- Objetos compostos:
-
Em vez de herdar comportamentos, um objeto composto inclui instâncias de outros objetos, cada um com comportamentos específicos.
-
Cada objeto é especializado em uma tarefa específica, incentivando a reutilização de código.
- Flexibilidade e modificabilidade:
-
A composição oferece mais flexibilidade em comparação com a herança, permitindo a adição, remoção ou substituição dinâmica de comportamentos durante a execução.
-
Modificações em um componente não impactam diretamente outros componentes.
Aplicando Composition Pattern na prática
Neste exemplo, vamos criar um componente chamado Notification que pode ser montado de várias maneiras.
Para manter nosso código organizado e limpo, adotaremos o composition pattern. Ao final, teremos o seguinte resultado:
Criando a aplicação React com Vite
Para começar, abra um terminal em um diretório de sua preferência e siga os seguintes passos:
-
Certifique-se de que você tem o Node.js instalado. Se não tiver, faça o download em uma versão superior a 16.0.0;
-
Nesta aplicação, estarei utilizando o NPM como gerenciador de pacotes. Caso já tenha o NPM instalado em sua máquina, você está pronto para prosseguir. Se preferir, pode optar pelo Yarn ou PNPM, conforme sua preferência.
-
Certifique-se de ter o gerenciador de pacotes escolhido instalado e configurado corretamente em seu ambiente antes de dar continuidade ao processo de criação da aplicação com Vite.
Esse comando usará a versão mais recente do Vite em seu projeto.
Responda às perguntas feitas pelo Vite durante o processo de criação, como o nome da aplicação, o framework desejado (no nosso caso, React) e escolha entre JavaScript ou TypeScript. Em nossa aplicação, optamos por React e TypeScript.
Siga as instruções do Vite para finalizar a instalação das dependências do seu projeto.
Navegue até a pasta com o nome do seu projeto, instale as dependências e, em seguida, execute a aplicação no navegador.
Adicioando EditorConfig
Neste projeto, optei por não configurar o ESLint, no entanto, vamos aproveitar o EditorConfig para manter uma consistência nas práticas de codificação.
O EditorConfig é uma ferramenta útil que nos permite definir e compartilhar configurações de estilo entre desenvolvedores, garantindo um código uniforme mesmo em diferentes ambientes e editores.
A principal vantagem é que não é necessário instalar plugins, já que muitos editores suportam nativamente o EditorConfig.
Para incorporá-lo ao projeto, basta criar um arquivo chamado .editorconfig na raiz do projeto e definir as regras desejadas para a formatação do código, já tenho algumas regras prontas, mas para detalhes mais específicos, você pode acessar o site oficial deles, EditorConfig
Biblioteca de ícones Lucide
Optei por utilizar essa biblioteca aberta devido à variedade de ícones, facilidade de integração e otimização de código.
Instalando e configurando o Tailwind CSS
Vamos começar instalando o tailwindcss e suas dependências, além de gerar os arquivos tailwind.config.js e postcss.config.js. Utilize o seguinte comando no terminal:
Certifique-se de adicionar os caminhos necessários ao arquivo tailwind.config.js, que deve parecer com o exemplo abaixo:
Agora, inclua as diretivas do Tailwind em seu arquivo CSS (geralmente ./src/index.css) para cada camada:
Após isso, inicie o processo de compilação com o seguinte comando:
Pronto! Agora você pode começar a utilizar as classes de utilidade do Tailwind para estilizar seu conteúdo.
Instalando Tailwind Merge
O tailwind-merge é útil em situações onde é necessário personalizar ou sobrepor estilos específicos de forma seletiva.
Para obter mais detalhes sobre a biblioteca, consulte a documentação oficial no GitHub.
Componentes
Com o projeto iniciado, crie uma pasta ‘components’ dentro de ‘src’ e, em seguida, uma subpasta ‘Notification’. Nesta última, adicione os seguintes arquivos
Notification Root
Notification Content
Notification Icon
Notification Actions
Notification Button
Index
Em resumo, este arquivo atua como um ponto de entrada para todos os componentes relacionados a Notification, simplificando a importação e utilização desses elementos em outros lugares do projeto.
App.tsx
Vamos utilizar o componente no App.tsx :
- Dentro do componente App, criamos instâncias do componente Notification:
- <Notification.Root>: Define o container principal da notificação.
- <Notification.Icon>: Exibe um ícone na notificação.
- <Notification.Content>: Apresenta o texto da notificação.
- <Notification.Actions>: Agrupa os botões de ação.
- <Notification.Button>: Cada botão dentro de Actions representa uma ação, como fechar ou confirmar.
- Os exemplos mostram variações de configurações possíveis, como diferentes estilos, tamanhos de texto e ícones personalizados.
Conclusão
Composition Pattern no React proporciona uma abordagem modular e eficiente para o desenvolvimento de componentes, o Tailwind Merge destaca-se quando se trata de estilização unitária.
Essa combinação oferece um controle preciso sobre a aparência de cada componente, tornando a personalização de estilos uma tarefa eficaz e simplificada em projetos React.
Ah, e para quem quiser conferir mais detalhes, criei um repositório no GitHub com o código utilizado neste post. É só dar uma olhadinha clicando no link abaixo:
Identificou algum problema no texto? Conto com sua ajuda para corrigir!
Este projeto é open source, então é só fazer as alterações no arquivo de texto, diretamente no Github, e abrir um pull-request.
Contribuir com a comunidade de desenvolvimento web nunca foi tão fácil e eficiente.