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.