Componentes puros no React: como funcionam e quando usá-los
  Componentes puros no React são todos sobre desempenho. Eles ajudam sua aplicação a evitar re-renderizações desnecessárias verificando se as entradas do componente (props ou state) realmente mudaram. Neste artigo, veremos como os componentes puros funcionam, como usá-los e quando são úteis — com exemplos claros e modernos.
Principais Pontos
- Aprenda o que torna um componente “puro” no React
 - Veja quando usar 
React.PureComponentouReact.memo - Entenda a comparação superficial e seu impacto nas re-renderizações
 
O que é um componente puro?
Um componente puro é um componente que só re-renderiza quando suas props ou state mudaram. O React determina se deve re-renderizar fazendo uma comparação superficial das props/state atuais com as anteriores.
Usando React.PureComponent
React.PureComponent é o equivalente em componente de classe a uma função pura. Ele implementa um método shouldComponentUpdate() integrado que realiza uma comparação superficial.
class MyComponent extends React.PureComponent {
  render() {
    return <div>{this.props.text}</div>;
  }
}
Se this.props.text não mudou, o componente não será re-renderizado.
Alternativa funcional: React.memo
Para componentes funcionais, use React.memo().
const MyComponent = React.memo(function MyComponent({ text }) {
  return <div>{text}</div>;
});
O React ignorará a renderização se text for o mesmo da renderização anterior.
Como funciona a comparação superficial
Uma comparação superficial significa:
- Valores primitivos (como números ou strings) são comparados por valor
 - Objetos e arrays são comparados por referência
 
{ a: 1 } === { a: 1 } // false
const obj = { a: 1 }
obj === obj // true
Então, se você estiver passando um objeto que é mutado em vez de recriado, um componente puro pode não perceber a mudança.
Exemplo do mundo real
Sem otimização
const Item = ({ data }) => <div>{data.label}</div>;
Isso será re-renderizado sempre que o componente pai re-renderizar, mesmo que data não tenha mudado.
Com React.memo
const Item = React.memo(({ data }) => <div>{data.label}</div>);
Agora o componente só re-renderiza quando data é um novo objeto.
Quando usar PureComponent ou memo
- Você está renderizando listas com muitos itens
 - As props do componente permanecem estáveis entre renderizações
 - Você quer reduzir ciclos de renderização em partes da sua aplicação sensíveis ao desempenho
 - Você está usando 
useCallbackouuseMemopara preservar referências 
Armadilhas comuns
- A comparação superficial não detecta mudanças profundas (objetos/arrays aninhados)
 - Não use a menos que você esteja confiante de que as props não sofrem mutações silenciosas
 - Pode introduzir bugs se você passar referências instáveis
 
React.memo vs React.PureComponent
Recurso React.PureComponent React.memo Tipo de componente Componente de classe Componente funcional Lógica de comparação Props + state (superficial) Apenas props (superficial) Função de comparação personalizada ❌ ✅ React.memo(fn) Uso moderno Menos comum Amplamente utilizado
Conclusão
Componentes puros podem ajudar o React a pular re-renderizações e manter sua UI performática — mas não são uma solução milagrosa. Prefira React.memo para componentes funcionais e entenda que a comparação superficial significa que as referências importam. Use quando o desempenho for importante e as props forem estáveis.
Perguntas Frequentes
Ele evita re-renderizações desnecessárias quando props/state não mudaram (usando comparação superficial).
Use-o quando seu componente funcional recebe props estáveis e a re-renderização seria desperdiçada.
Não. Ele usa comparação superficial. Você deve evitar mutar objetos ou arrays no local.