Introdução
Neste projeto, você aprenderá como criar uma aplicação React que permite aos usuários alternar entre o modo claro e o modo escuro. O projeto demonstrará o uso da React Context API e do hook useContext para gerenciar o estado global do tema.
👀 Pré-visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como criar um
ThemeContextusando a Context API do React - Como usar o
ThemeContextno componenteApppara alterar o estilo geral da aplicação com base no tema - Como usar o
ThemeContextno componenteCardpara alterar os estilos do cartão com base no tema - Como envolver o componente
Appcom oThemeProviderpara tornar o contexto do tema disponível em toda a aplicação
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Entender como usar a React Context API para gerenciar o estado global
- Aplicar o hook
useContextpara acessar os valores do contexto - Implementar estilos diferentes com base no tema atual
- Alternar o tema e atualizar o estado global
Configurar o Projeto
Nesta etapa, você aprenderá como configurar o projeto e instalar as dependências necessárias.
Abra seu editor de código e navegue até o diretório do projeto.
├── components
│ └── Card.js
├── contexts
│ └── ThemeContext.js
├── App.css
├── App.js
├── index.css
├── index.js
├── reportWebVitals.js
└── setupTests.js
Descrições dos arquivos:
- O diretório
componentscontém todos os arquivos de componentes. - O diretório
contextscontém o arquivoThemeContext.jsque precisa ser completado.
Como este é um projeto React, precisamos instalar as dependências executando o seguinte comando:
npm install
Após instalar as dependências, siga estas etapas para acessar o projeto:
- Inicie um servidor local executando o seguinte comando no terminal:
npm start
- Abra o servidor web no lado direito do ambiente de codificação. Você verá o efeito estático como mostrado abaixo. Atualmente, clicar no botão "Dark Mode" não causa nenhuma alteração.

Criar o ThemeContext
Nesta etapa, você aprenderá como criar o ThemeContext usando a Context API do React. Siga as etapas abaixo para concluir esta etapa:
Abra o arquivo
ThemeContext.jslocalizado no diretóriosrc/contexts.Crie o
ThemeContextusandoReact.createContext():export const ThemeContext = React.createContext();Crie o componente
ThemeProviderque irá envolver o componenteAppe fornecer o contexto do tema:export const ThemeProvider = (props) => { const [theme, setTheme] = React.useState("light"); return ( <ThemeContext.Provider value={{ theme, setTheme }}> {props.children} </ThemeContext.Provider> ); };O componente
ThemeProviderinicializa o estadothemepara "light" e fornece os valoresthemeesetThemeao contexto.
Usar o ThemeContext no componente App
Nesta etapa, você aprenderá como usar o ThemeContext no componente App para alterar o estilo geral do aplicativo com base no tema.
Abra o arquivo
src/App.js.Use o hook
useContextpara acessar o valorthemedoThemeContext:const { theme } = useContext(ThemeContext);Atualize o JSX do componente
Apppara aplicar estilos diferentes com base no valortheme:return ( <div className={theme === "light" ? "app app-light" : "app app-dark"}> <Card></Card> </div> );As classes
app-lighteapp-darkserão aplicadas ao elementodivprincipal com base no valortheme.
Usar o ThemeContext no componente Card
Nesta etapa, você aprenderá como usar o ThemeContext no componente Card para alterar os estilos do cartão com base no tema.
Abra o arquivo
src/components/Card.js.Use o hook
useContextpara acessar os valoresthemeesetThemedoThemeContext:export const Card = () => { const { theme, setTheme } = useContext(ThemeContext); // ... };Implemente a função
handleThemeTogglepara alternar o tema:const handleThemeToggle = (e) => { setTheme(theme === "light" ? "dark" : "light"); };Esta função atualizará o valor
themenoThemeContextquando o botão for clicado.
Envolver o componente App com o ThemeProvider
Nesta etapa final, você aprenderá como envolver o componente App com o ThemeProvider para tornar o contexto do tema disponível em toda a aplicação.
Abra o arquivo
src/index.js.Importe o
ThemeProviderdo arquivoThemeContext.js:import { ThemeProvider } from "./contexts/ThemeContext";Envolva o componente
Appcom oThemeProviderna funçãoReactDOM.render:root.render( <React.StrictMode> <ThemeProvider> <App /> </ThemeProvider> </React.StrictMode> );
Agora, o componente App e seus componentes filhos podem acessar os valores theme e setTheme do ThemeContext usando o hook useContext.
Após concluir o desafio, o efeito deve ser o seguinte:

Parabéns! Você concluiu o projeto. Agora você deve ser capaz de alternar entre o modo claro e escuro clicando no botão no componente do cartão.
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



