DEV Community

Cover image for A Magia do Hook useContext no React
Levy Henrique Alves Nunes
Levy Henrique Alves Nunes

Posted on

A Magia do Hook useContext no React

Olá, entusiastas do React! Hoje, vamos mergulhar no fascinante mundo do Hook useContext. Esta ferramenta incrível facilita a passagem de dados entre componentes e pode revolucionar a forma como você desenvolve aplicações React. Vamos lá?

O que é o Hook useContext?
O React é conhecido por sua capacidade de criar componentes modulares e reutilizáveis. No entanto, às vezes, precisamos passar dados entre componentes que estão distantes na árvore de componentes. O método tradicional de fazer isso é através de prop drilling, mas isso pode rapidamente se tornar tedioso e confuso. Aí é onde o useContext entra em ação.

O Hook useContext permite compartilhar valores como estes (estado, funções, etc.) entre componentes sem passá-los explicitamente através de cada nível da árvore de componentes.

Criando Contexto com useContext
O primeiro passo para utilizar o useContext é criar um contexto. Isso pode ser feito usando a função React.createContext(), que retorna um objeto com um Provider e um Consumer. No entanto, com Hooks, geralmente só utilizamos o Provider.

const MyThemeContext = React.createContext('light');
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, estamos criando um contexto para um tema, que é inicialmente definido como "light".

Usando o Contexto em Componentes Filhos
A mágica começa quando começamos a usar este contexto em nossos componentes. O Provider permite que os componentes filhos consumam o valor do contexto sem ter que passá-lo explicitamente.

function App() {
  return (
    <MyThemeContext.Provider value="dark">
      <ThemedButton />
    </MyThemeContext.Provider>
  );
}
Enter fullscreen mode Exit fullscreen mode

Para acessar o valor do contexto, utilizamos o Hook useContext:

function ThemedButton() {
  const theme = useContext(MyThemeContext);
  return <button>{theme === 'light' ? 'Claro' : 'Escuro'}</button>;
}
Enter fullscreen mode Exit fullscreen mode

Atualizando o Contexto
Um dos maiores benefícios do useContext é a sua capacidade de atualizar os valores e refletir essas mudanças em todos os componentes que consomem esse contexto. Suponha que queremos que os usuários possam alternar entre os temas claro e escuro:

function ThemeProvider({ children }) {
  const [theme, setTheme] = React.useState('light');

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

  return (
    <MyThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </MyThemeContext.Provider>
  );
}
Enter fullscreen mode Exit fullscreen mode

E nosso botão agora pode alternar entre os temas:

function ThemedButton() {
  const { theme, toggleTheme } = useContext(MyThemeContext);

  return (
    <button onClick={toggleTheme}>
      {theme === 'light' ? 'Mudar para Escuro' : 'Mudar para Claro'}
    </button>
  );
}
Enter fullscreen mode Exit fullscreen mode

Conclusão
O Hook useContext é uma ferramenta poderosa no arsenal do React. Ele elimina a necessidade de prop drilling e torna o código mais limpo e manutenível. Ao aprender e dominar useContext, você eleva sua capacidade de desenvolvimento no React a um novo patamar, criando aplicações mais flexíveis e eficientes.

Então, da próxima vez que se encontrar passando props desnecessariamente entre componentes distantes, considere dar uma chance ao useContext. Ele pode ser exatamente o que você precisa para tornar seu código mais limpo e eficaz!

E você? Já usou o useContext em seus projetos? Compartilhe suas experiências nos comentários abaixo!

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay