Utilizando Styled Components no React

Neste artigo você aprenderá sobre a biblioteca Styled Components e como a utilizamos para criar componentes de estilo em React JS.

Conhecendo o Styled Components

O Styled Components é uma biblioteca (lib) do React e do React Native que nos permite criar componentes de estilo ao escrever códigos CSS dentro de um arquivo JavaScript.

O modo de estilizar um componente utilizando a biblioteca Styled Components também é conhecido como CSS-in-JS (CSS dentro do JavaScript).

Styled Components: na prática

const Button = styled.button` background: transparent; border-radius: 3px; border: 2px solid palevioletred; color: palevioletred; margin: 0 1em; padding: 0.25em 1em; `
Código 1. Style Components na prática

Instalando o Styled Components

Já que o Styled Components é de uma biblioteca, para utilizá-la em nosso projeto React devemos realizar a sua instalação, que pode ser feita de duas maneiras: com o uso do Yarn ou do Npm.

Para realizar a instalação da biblioteca utilizando o Yarn como gerenciador de pacotes, podemos utilizar o comando abaixo:

yarn add styled-components

Em alternativa ao Yarn, também podemos instalar a biblioteca utilizando o Npm como gerenciador de pacotes. Para isso utilizamos o comando abaixo:

npm install styled-components --save

Sintaxe

O Styled Components possui um padrão de criação dos seus componentes para que seja escrito o código CSS-in-JS, como vemos no exemplo do Código 2.

import styled from ‘styled-components’; const Form = styled.form` background-color: gray; `;
Código 2. Sintaxe do style components

Note que na primeira linha do Código 2 temos a importação da biblioteca dentro de um arquivo JavaScript.

Já na terceira linha do Código 2 perceba que o componente criado com o styled + um elemento HTML será armazenado dentro de uma variável.

Desta forma poderemos importar esta variável no código React para ser utilizada.

Note também que para escrever o código CSS dentro do componente criado faremos uso de template strings, como vemos no exemplo do Código 3.

const Form = styled.form` background-color: gray; `;
Código 3. Componente Form com a propriedade CSS dentro de um template strings
Template literals ou template strings é uma forma de criar uma cadeia de caracteres, utilizando o backtick (acento grave) para realizar a interpolação dos caracteres.

Exemplos de Styled Components

Exemplo 1

Nos Códigos 4 e 5 demonstraremos dois componentes criados com a biblioteca styled components.

import { Div, Title } from "./style"; export default function App() { return ( <Div> <Title>Hello World!!!</Title> </Div> ); }
Código 4. App.js
import styled from "styled-components"; export const Div = styled.div` display: flex; justify-content: center; background-color: papayawhip; `; export const Title = styled.h1` color: palevioletred; `;
Código 5. style.js

Exemplo 2

No exemplo dos Códigos 6 e 7 demonstraremos como passar props para um styled components.

import { Input } from "./style"; export default function App() { return ( <div> <Input defaultValue="@probablyup" type="text" /> <Input defaultValue="@geelen" type="text" inputColor="rebeccapurple" /> </div> ); }
Código 6. App.js
import styled from 'styled-components' export const Input = styled.input` padding: 0.5em; margin: 0.5em; color: ${props => props.inputColor || "palevioletred"}; background: papayawhip; border: none; border-radius: 3px; `;
Código 7. style.js

Note que no Código 6 o componente Input ao ser chamado pela segunda vez, passará a propriedade inputColor=”rebeccapurple.

Como pode ser visto no Código 7, essa propriedade será utilizada em uma estrutura condicional dentro do CSS do componente e o estilo referente ao props será acionado somente se a condição for atendida.

Exemplo 3

Nos Códigos 8 e 9 demonstraremos como estender componentes com o uso do Styled Components.

import { Button, TomatoButton } from "./style"; export default function App() { return ( <div> <Button>Botão Normal</Button> <TomatoButton>Botão Tomate</TomatoButton> </div> ); }
Código 8. App.js
import styled from 'styled-components' export const Button = styled.button` color: palevioletred; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px; `; export const TomatoButton = styled(Button)` color: tomato; border-color: tomato; `;
Código 9. style.js

Note que neste exemplo do Código 9, o código referente ao componente Button será estendido para o componente TomatoButton.

Uma dica no caso de reutilizar o código de um componente de estilo é fazer um mapeamento do layout do seu projeto, assim você evita ficar desenvolvendo códigos repetidos e trabalha somente estendendo o código do componente necessário como uma base sólida para outro componente.

Artigos relacionados