Aula 6

React

Estilização de componentes e Material-UI

📌

📅 Versão atualizada em 19/06/2025 (versão 2)

Nessa versão foram excluídos os seguintes tópicos:

❌ Renderização Condicional - movido para a Aula 5

❌ Re-renderização - movido para a Aula 5

📌

📅 Versão atualizada em 19/06/2025 (versão 2)

Nessa versão foram incluídos os seguintes tópicos:

✔️ Mais detalhes, explicações e links

✔️ Vanilla Extract

Como estilizar com CSS em componentes do React

Existem várias maneiras de usar CSS em uma aplicação React. Aqui estão três abordagens populares:

Usando um Arquivo CSS Externo

Crie um arquivo CSS separado e importe-o no componente.


.container {
  background-color: #f9f9f9;
  color: #333;
  padding: 20px;
  border-radius: 8px;
  text-align: center;
  font-family: Arial, sans-serif;
}

  

import React from "react";
import "./App.css";

function App() {
  return (
    <div className="container"div>
      <h1>Olá, React com CSS!</h1>
      <p>Este é um exemplo simples de uso de CSS em React.</p>
    <div>
  );
}

export default App;

  

Usando Inline Styles

Os estilos são definidos como objetos JavaScript e aplicados diretamente nos elementos usando a propriedade style.


import React from "react";

function App() {
  const estiloContainer = {
    backgroundColor: "#f9f9f9",
    color: "#333",
    padding: "20px",
    borderRadius: "8px",
    textAlign: "center",
    fontFamily: "Arial, sans-serif",
  };

  return (
    <div style={estiloContainer}>
      <h1>Olá, React com Estilos Inline!</h1>
      <p>Este é um exemplo simples de estilos inline.</p>
    </div>
  );
}

export default App;

  

Usando CSS Modules

CSS Modules é uma abordagem de estilização que permite escopar automaticamente os estilos de um arquivo CSS para o componente em que são usados. Isso evita conflitos de nomes de classes entre diferentes partes de uma aplicação. Com CSS Modules, os estilos são importados como objetos JavaScript, permitindo aplicar classes diretamente aos elementos HTML, como className={styles.minhaClasse}. Eles são amplamente utilizados em aplicações React e são suportados por ferramentas modernas de build, como Webpack e Vite. Essa técnica é ideal para manter o código organizado e garantir que os estilos sejam isolados por componente, promovendo a reutilização e a modularidade.


/* App.module.css */
.container {
  background-color: #f9f9f9;
  color: #333;
  padding: 20px;
  border-radius: 8px;
  text-align: center;
  font-family: Arial, sans-serif;
}

  

import React from "react";
import styles from "./App.module.css";

function App() {
  return (
    <div className={styles.container}>
      <h1>Olá, React com CSS Modules!</h1>
      <p>Os estilos estão escopados ao componente.</p>
    </div>
  );
}

export default App;

  

Styled Components

O Styled Components é uma biblioteca para estilização no React que utiliza o conceito de CSS-in-JS, permitindo que estilos sejam escritos diretamente dentro de componentes JavaScript. Com ele, você cria estilos encapsulados e reutilizáveis ao definir componentes estilizados usando a função styled, fornecida pela biblioteca. Por exemplo, você pode criar um botão estilizado com const Botao = styled.button`background-color: blue; color: white;`;. Esses componentes são utilizados como qualquer outro componente React, garantindo que os estilos sejam aplicados de forma específica sem afetar outros elementos da aplicação. Além disso, o Styled Components suporta dinamicidade, permitindo passar propriedades para alterar estilos de maneira flexível, como background-color: ${props => props.cor || 'blue'};. Essa abordagem combina o poder do JavaScript e do CSS, simplificando a manutenção e organização de estilos em aplicações React modernas.

Instale e veja como funciona em: Documentação do Styled Components

Exemplo
        
import styled from 'styled-components';

const Button = styled.button\`
    background: \${props => (props.primary ? 'blue' : 'gray')};
    color: white;
    padding: 10px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
\`;

function App() {
    return (
        <div>
            <Button primary>Primary</Button>
            <Button>Secondary</Button>
        </div>
    );
}
        
    

Veja este artigo que explica sobre o atual cenário do Styled Components: Styled Components: Um adeus ou um até logo?

Emotion

Emotion é uma biblioteca de estilização em JavaScript que permite criar estilos dinâmicos para componentes React e outros frameworks. Ela combina a flexibilidade do CSS-in-JS com uma API simples e poderosa, oferecendo suporte para estilos globais, temáticos e específicos de componentes. A geração de estilos ocorre em tempo de execução, permitindo que você altere dinamicamente as propriedades de estilo com base em variáveis ou estados do componente. Emotion também suporta a integração com TypeScript e oferece várias formas de uso, como o uso de classes estilizadas (`styled`) ou a aplicação direta de estilos com a função `css`. Essa abordagem facilita a criação de interfaces modernas e altamente personalizáveis.

Instale e veja como funciona em: Documentação do Emotion

Exemplo
        
/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react';

const buttonStyle = primary => css\`
    background: \${primary ? 'blue' : 'gray'};
    color: white;
    padding: 10px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
\`;

function Button({ primary, children }) {
    return <button css={buttonStyle(primary)}>{children}</button>;
}
        
    

Vanilla Extract

Vanilla Extract é uma biblioteca de CSS-in-TypeScript que permite criar estilos com tipagem estática e gerar arquivos CSS em tempo de build. Diferentemente de outras soluções CSS-in-JS, ela elimina a necessidade de aplicar estilos em tempo de execução, melhorando a performance da aplicação. Com Vanilla Extract, os estilos são escopados automaticamente, semelhantes ao CSS Modules, e é possível criar

Instale e veja como funciona em: Documentação do Vanilla Extract

Exemplo
        
// Criar um arquivo chamado styles.css.ts e inserir o código abaixo
import { style } from '@vanilla-extract/css';

export const botao = style({
  backgroundColor: 'blue',
  color: 'white',
  padding: '10px 20px',
  borderRadius: '5px',
  border: 'none',
  cursor: 'pointer',
  ':hover': {
    backgroundColor: 'darkblue',
  },
});


        


import React from 'react';
import * as styles from './styles.css';

function Botao() {
  return <button className={styles.botao}>Clique Aqui</button>;
}

export default Botao;
        
    

Tailwind CSS

Tailwind CSS é um framework utilitário de CSS que permite criar interfaces de forma rápida e eficiente usando classes pré-definidas diretamente no HTML. Em vez de escrever estilos personalizados, você utiliza combinações de classes utilitárias para estilizar os elementos, como bg-blue-500 para definir a cor de fundo ou p-4 para adicionar espaçamento interno. Ele promove consistência no design e facilita a manutenção ao evitar a repetição de estilos personalizados. Além disso, Tailwind é altamente configurável, permitindo personalizar temas, adicionar classes personalizadas e reduzir o tamanho final do CSS com a remoção de estilos não utilizados (purge). É uma solução moderna e flexível para construir interfaces responsivas e acessíveis.

Instale e veja como funciona em: Documentação do Tailwind CSS

Exemplo
        
const App = () => {
    return (
        <div>
            <button className="bg-blue-500 text-white p-2 rounded">Primary</button>
            <button className="bg-gray-500 text-white p-2 rounded">Secondary</button>
        </div>
    );
}
        
    

Material-UI

Material UI é uma biblioteca de componentes React baseada nos princípios de design do Google Material Design. Ela fornece uma ampla gama de componentes prontos para uso, como botões, formulários, tabelas e layouts, estilizados de forma consistente e moderna. Além de permitir personalização por meio de temas, Material UI oferece integração com CSS-in-JS, possibilitando a criação de estilos dinâmicos diretamente no JavaScript. A biblioteca também suporta responsividade nativa e práticas de acessibilidade, tornando-se uma escolha popular para desenvolvedores que desejam criar interfaces bonitas, consistentes e fáceis de usar, sem começar do zero.

Instale e veja como funciona em: Documentação do Material-UI

        
import Button from '@mui/material/Button';

const App = () => {
    return (
        <div>
            <Button variant="contained" color="primary">Primary</Button>
            <Button variant="contained" color="secondary">Secondary</Button>
        </div>
    );
}