Aprenda a Testar Temas Dinâmicos em React: Modo Escuro e Claro

Neste tutorial, vamos explorar como implementar e testar temas dinâmicos em React, focando nos modos escuro e claro.

Testando Temas Dinâmicos no React

Os temas dinâmicos se tornaram uma parte essencial da experiência do usuário em aplicações modernas. Neste tutorial, abordaremos como implementar e testar temas dinâmicos em React, com foco nos modos escuro e claro. Para começar, vamos configurar nosso ambiente.

Configurando o Ambiente

Primeiro, precisamos garantir que temos um projeto React configurado. Você pode criar um novo projeto usando o Create React App:

npx create-react-app tema-dinamico
cd tema-dinamico

Essa configuração cria uma nova aplicação React onde poderemos trabalhar. Após a criação do projeto, instale a biblioteca styled-components, que nos ajudará a gerenciar estilos dinâmicos:

npm install styled-components

A biblioteca styled-components permite a criação de componentes com estilos que podem mudar dinamicamente, dependendo do tema selecionado.

Implementando Temas Dinâmicos

Vamos criar um contexto que fornecerá o tema atual para toda a aplicação. Crie um arquivo chamado ThemeContext.js:

import React, { createContext, useState, useContext } from 'react';

const ThemeContext = createContext();

export const ThemeProvider = ({ children }) => {
    const [theme, setTheme] = useState('light'); // Tema padrão

    const toggleTheme = () => {
        setTheme(prevTheme => (prevTheme === 'light' ? 'dark' : 'light'));
    };

    return (
        <ThemeContext.Provider value={{ theme, toggleTheme }}>
            {children}
        </ThemeContext.Provider>
    );
};

export const useTheme = () => useContext(ThemeContext);

O código acima cria um contexto que gerencia o tema atual e uma função para alternar entre os temas. A função toggleTheme muda o estado do tema de 'light' para 'dark' e vice-versa.

Usando o Contexto no Componente Principal

Agora que temos o contexto configurado, vamos usá-lo em nosso componente principal. No arquivo App.js, faça as seguintes alterações:

import React from 'react';
import { ThemeProvider, useTheme } from './ThemeContext';
import styled from 'styled-components';

const Container = styled.div`
    background: ${props => (props.theme === 'dark' ? '#333' : '#FFF')};
    color: ${props => (props.theme === 'dark' ? '#FFF' : '#000')};
    height: 100vh;
    display: flex;
    justify-content: center;
Align-items: center;
`;

const App = () => {
    const { theme, toggleTheme } = useTheme();

    return (
        <Container theme={theme}>
            <button onClick={toggleTheme}>Toggle Theme</button>
        </Container>
    );
};

const Root = () => (
    <ThemeProvider>
        <App />
    </ThemeProvider>
);

export default Root;

Neste código, criamos um componente Container que altera seu fundo e cor do texto com base no tema atual. Um botão é adicionado para alternar entre os temas ao ser clicado.

Testando os Temas

Para garantir que nossos temas dinâmicos estão funcionando corretamente, podemos escrever alguns testes. Usaremos a biblioteca @testing-library/react para isso. Primeiro, instale a biblioteca:

npm install @testing-library/react @testing-library/jest-dom

Agora, crie um arquivo de teste chamado App.test.js:

import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { ThemeProvider } from './ThemeContext';
import App from './App';

test('toggle theme button changes theme', () => {
    const { getByText } = render(
        <ThemeProvider>
            <App />
        </ThemeProvider>
    );

    const button = getByText(/toggle theme/i);
    fireEvent.click(button);
    expect(document.body).toHaveStyle('background: #333');

    fireEvent.click(button);
    expect(document.body).toHaveStyle('background: #FFF');
});

Esse teste verifica se o botão de alternância muda o tema corretamente. Ao clicar no botão, o fundo deve mudar entre o claro e o escuro, e estamos testando isso com as asserções corretas.

Considerações Finais

O teste de temas dinâmicos em React é uma habilidade essencial para garantir que sua aplicação ofereça uma experiência de usuário agradável e acessível. Com o uso de Context API e styled-components, conseguimos implementar uma solução elegante e funcional. Além disso, testar essa funcionalidade garante que as alterações de tema estão sendo aplicadas corretamente, melhorando a qualidade do seu software.

Agora, você está pronto para aplicar essa abordagem em suas próprias aplicações React, garantindo uma experiência de usuário fluida e adaptável!

Com a crescente popularidade do modo escuro em aplicações, entender como implementar e testar temas dinâmicos em React é fundamental. Isso não apenas melhora a estética da aplicação, mas também proporciona uma melhor experiência para o usuário, especialmente em ambientes de baixa luminosidade. Neste artigo, vamos explorar em detalhes as melhores práticas para implementar essa funcionalidade, garantindo que você possa criar interfaces modernas e acessíveis. Seja você um desenvolvedor iniciante ou experiente, a implementação de temas dinâmicos pode realmente destacar sua aplicação no mercado atual. Vamos juntos desvendar os segredos para um design responsivo e atraente que atenda às expectativas dos usuários!

Algumas aplicações:

  • Aplicações de design responsivo
  • Desenvolvimento de interfaces de usuário modernas
  • Implementação de acessibilidade em aplicações web

Dicas para quem está começando

  • Comece sempre com um tema claro e um escuro para testar.
  • Utilize ferramentas de design para visualizar como os temas se comportam.
  • Teste em diversos dispositivos para garantir a responsividade.
  • Considere a acessibilidade ao escolher cores.
Foto de Gabriel Nogueira
Contribuições de
Gabriel Nogueira

Desenvolvedor front-end especializado em React e design de interfaces responsivas.

Mais sobre o autor
Compartilhe este tutorial: Como testar temas dinâmicos no React (modo escuro/claro)?

Compartilhe este tutorial

Continue aprendendo:

Como testar hooks customizados no React?

Aprenda a testar hooks customizados no React com exemplos práticos e dicas valiosas.

Tutorial anterior

Como testar estados globais compartilhados no React?

Aprenda a testar estados globais compartilhados no React de maneira eficaz.

Próximo tutorial