A Magia do Hook useContext no React
Published: 2023-08-23 02:09:37

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');
```

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>
  );
}
```

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


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

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>
  );
}
```

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>
  );
}
```

**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!