# Como evitar prop drilling no React

> Estratégias e padrões para resolver o problema de prop drilling em aplicações React

- Author: Franklin Javier
- Published: 2022-12-07
- Language: Português (Brasil)
- Tags: react, frontend
- Canonical: https://blog-preview.imfrank.dev/pt-br/blog/evitando-prop-drilling-react/

Prop drilling é um padrão comum em React onde você precisa passar dados através de múltiplos componentes intermediários para chegar ao componente que realmente precisa deles. Isso se torna problemático porque torna o código mais difícil de manter e reduz a reusabilidade dos componentes.

## O Problema

Quando você tem uma hierarquia profunda de componentes e precisa passar dados do topo até o fundo, acaba tendo que passar props por todos os componentes do meio, mesmo que eles não usem esses dados.

## Soluções

### 1. Componentes Intermediários

Crie componentes wrapper que recebem e encaminham props pela hierarquia. Isso pode organizar melhor a estrutura, mas não elimina completamente o problema.

### 2. React Context

Use a Context API do React para "passar dados para componentes aninhados sem ter que passar props manualmente em cada nível". Esta é a solução mais comum e recomendada pelo próprio React.

```javascript
const ThemeContext = React.createContext('light');

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}
```

### 3. React Hooks

Use hooks como `useContext` para acessar o contexto de forma simplificada:

```javascript
function ThemedButton() {
  const theme = useContext(ThemeContext);
  return <Button theme={theme} />;
}
```

### 4. Bibliotecas de State Management

Implemente soluções externas como:
- **Zustand**: Leve e simples
- **Jotai**: Atomic state management
- **Recoil**: Desenvolvido pelo Facebook

Cada uma oferece diferentes trade-offs entre complexidade e funcionalidades.

## Quando usar cada solução?

- **Context**: Para dados que muitos componentes precisam (tema, usuário autenticado, idioma)
- **State Management Libraries**: Para aplicações complexas com muitos estados compartilhados
- **Props**: Para componentes com hierarquia rasa ou dados usados por poucos componentes

---

Escolha a solução baseada na complexidade da sua aplicação. Nem sempre você precisa de uma biblioteca externa - muitas vezes Context é suficiente.

## Posts relacionados

- [Tradeoffs de testes de componente React com snapshot](https://blog-preview.imfrank.dev/pt-br/blog/tradeoffs-snapshot-testing-react/) (2022-12-06): Vantagens e desvantagens do snapshot testing em componentes React
- [Troquei Tailwind por StyleX. O site não ficou mais rápido.](https://blog-preview.imfrank.dev/pt-br/blog/stylex-nao-deixou-o-site-mais-rapido/) (2026-08-25): Migrei um site com nota 100 no PageSpeed para StyleX, medi o resultado e descobri que o ganho real estava em outro lugar.
- [O que performance web realmente significa em e-commerce](https://blog-preview.imfrank.dev/pt-br/blog/performance-web-ecommerce/) (2024-03-20): Tiramos uma loja de 15s para 3s em 3G lento e a conversão subiu 45%. O que medir, para onde o tempo realmente vai, e por que os maiores ganhos costumam ser remoções.

---

Todas as páginas deste site também estão disponíveis em markdown: solicite qualquer URL com o header `Accept: text/markdown`. Veja o [llms.txt](https://blog-preview.imfrank.dev/llms.txt) e o [sitemap](https://blog-preview.imfrank.dev/sitemap.xml).
