Chegou aquele momento em que você quer criar um app inspirado em uma aplicação web, ou simplesmente quer adotar um padrão de estilos mais fácil de manter e organizar, sem deixar propriedades espalhadas por cada componente do projeto.
Autor(a)
Natalia Kelim Thiel
Natalia é programadora e instrutora. Se apaixonou pela programação a primeira vista em 2013 e desde então vem trabalhando em diversas tecnologias no front-end, back-end, mobile e games.
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
style
É aí que entra a biblioteca styled-components. Com ela, você escreve estilos em um formato muito próximo do CSS e cria componentes já com seus estilos encapsulados, mantendo o código limpo e bem organizado.
Mas como aplicar tudo isso em um projeto React Native? É exatamente isso que vamos explorar ao longo deste artigo.
O Projeto Base
Para exemplificar, vamos usar a tela de um rosto que lembra o personagem Pikachu, que originalmente foi desenvolvida com a forma padrão de estilos do React Native. Fique à vontade para clonar o projeto ou criar um componente do zero para acompanhar o raciocínio.
Primeiros passos com styled-components
Vamos começar a transformar nossos estilos em styled-components pela boca. Mas, calma lá, não estamos esquecendo algo? Sim, falta instalar a biblioteca!
Para isso, executamos o seguinte comando, dentro da pasta do projeto, e ainda temos que rodar o projeto novamente:
# com npm
npm install styled-components
# com yarn
yarn add styled-components
Agora que o pacote está pronto para uso, vamos comparar a estrutura antiga com o novo formato.
O Modelo tradicional
Antes, dividíamos o componente em dois arquivos. Um para a estrutura e outro para a estilização com StyleSheet:
No exemplo, importamos os styled-components na variável styled e usamos o objeto `View` dentro dele para criarmos um componente do tipo view customizado.
No lugar da `View` poderíamos usar qualquer outro componente React Native. Então colocamos nosso “CSS” dentro de crases. Mas temos que fazer algumas mudanças em relação aos estilos normais, que são:
Mudar as vírgulas por ponto e vírgulas `;`.
Adicionar as unidades `px` após os números
Remover as aspas dos hexadecimais de cor.
Trocar a nomenclatura adicionando o traço em vez da primeira letra maiúscula.
Não é obrigatório, mas podemos também reescrever `borderWidth` e `borderColor` em uma propriedade unificada `border`.
Agora, vamos fazer o mesmo com o nariz e as bochechas. Como eles também são componentes `View` estilizados, podemos apenas retornar seus respectivos index, não sendo necessário mais um arquivo de estilos.
Para o nariz, basta converter da mesma forma que fizemos antes, de `estilos.js` para `index.js`.
Já com as bochechas, temos uma propriedade diferente: a transform. Nos estilos com React Native, temos de usar esse formato não tão interessante de array com objeto. Com styled-components, já podemos fazer em forma de CSS mesmo, veja abaixo.
Mas vamos primeiro olhar para a estrutura do componente.
Como temos a `View` interna, não podemos retornar apenas a view estilizada como temos feito. Precisamos manter essa estrutura e estilizar as duas `View`s. Então, neste caso, nosso `estilos.js` continuará existindo, porém, podemos mudar para a estrutura dos styled-components e retornar mais componentes estilizados.
Assim também simplificamos as margens em apenas uma linha de `margin`, como em CSS, e renomeamos o `olho` para `OlhoExterno`, pois `Olho` já é o nome do nosso componente principal.
No entanto, se apenas salvarmos esta alteração, um erro pode surgir. Isso acontece porque ainda é necessário modificar o `index.js` para utilizar os novos componentes criados com styled-components.
Caso surja a dúvida sobre como aplicar styled-components em aplicações já grandes, a dica é realizar a migração gradualmente, convertendo aos poucos os componentes, conforme for conveniente.
Nesse exemplo do olho, estamos recebendo ainda os estilos padrão do React Native, e eles ainda funcionam. Mas como essa aplicação é mais simples, vamos transformar até os `estilosExternos` em styled-components.
Para isso, utilizamos a herança de componentes. Ao analisar os arquivos principais `index.js` e `estilos.js`, observa-se que o segundo olho é chamado usando um estilo específico.
Podemos criar um novo componente para o segundo olho que herda o componente de olho original (usando styled-components), facilitando assim a reutilização e personalização. O estilo antigo `olhoDireito` dos estilos React Native pode ser removido.
Novos estilos em `src/Pikachu/estilos.js`
import { StyleSheet } from'react-native';
// Início do código novo import styled from'styled-components';
importOlhofrom'./Olho';
exportconstOlhoDireito = styled(Olho)`
transform: scaleX(-1);
`;
// Fim do código novo exportdefaultStyleSheet.create({
...
Passando dessa forma um outro componente ou styled-component para a função `styled`, podemos criar um novo styled-component que herda a estrutura e os estilos dele. Então, podemos usar nosso novo componente que herda `Olho` e o inverte no `index.js`.
Após salvar as alterações, caso os olhos não fiquem como esperado (ou seja, ambos apareçam iguais e não invertidos), é sinal de que a herança entre componentes não funcionou corretamente.
Isso acontece porque o `Olho` é um componente criado da forma tradicional no React Native, que usa styled-components dentro dele.
Portanto, precisamos permitir que os nossos styled-components internos recebam as alterações do nosso `OlhoDireito`. Caso estivéssemos tentando aplicar herança na boca, por exemplo, não teríamos este problema, pois a boca já é um styled-component.
Agora, passando a propriedade style para o `OlhoExterno`, podemos rodar nossa aplicação e a herança funciona. Também finalizamos a aplicação dos styled-components no `Olho`.
Acesso dinâmico às propriedades (props)
A estrutura da orelha é composta por um triângulo e um círculo que cobre parte do triângulo, fazendo o efeito de arredondamento no lado inferior.
Na implementação das orelhas, a inversão é feita de forma diferente: a propriedade `direita` é passada ao componente, que realiza a inversão de forma interna.
No exemplo acima, aplicamos a desestruturação diretamente nos argumentos da função (({ direita })) para coletar o valor booleano sem precisar digitar props.direita repetidas vezes.
Há um detalhe técnico sutil no comportamento do transform aqui: invertemos a ordem declarativa colocando o rotate antes do scaleX.
Isso ocorre porque a engine do Styled Components faz a leitura e o processamento dessas transformações de trás para frente. Fique de olho nisso quando trabalhar com rotações acumuladas!
Agora um desafio:
Agora que você domina a base do encapsulamento de estilos, que tal colocar a mão na massa?
Se você já acompanhou até aqui e quer treinar um pouco mais, você pode começar por aplicar styled-components no componente Pikachu que ficou faltando. Caso tenha perdido alguma coisa até aqui, você encontra o projeto neste ponto na branch `styled`.
Vantagens de usar styled-components react native em seus projetos
Neste artigo você pôde aprender os conceitos básicos de styled-components, transformar estilos padrão em styled-components, utilizar herança e acessar propriedades.
Além, é claro, de poder baixar um modelo de Pikachu feito apenas com estilos. Também vimos algumas características que diferem os estilos padrão dos styled-components e do CSS, quando aplicado no React.
Ficou com vontade de ver o seu código rodando direto no celular? Você pode aprender a criar projetos completos com Expo, integrar recursos nativos do aparelho e dominar o desenvolvimento multiplataforma.