Diagnosticar e corrigir re-renders lentos em React

Descubra porque um componente React está lento, meça com o Profiler e aplique as correções certas (posição do estado, memo, virtualização, transições) com código antes e depois. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Avançado · Código · Pendente de revisão editorial

Prompt

Atua como especialista em desempenho de React que diagnostica antes de otimizar.

Contexto:
- Código envolvido: {{codigo}}
- Sintoma observado: {{sintoma}}
- Dados de medição (se existirem): {{medicoes}}
- Versão do React: {{versao_react}}

Se o código não chegar para perceber de onde vêm as props ou o estado, pede-me os componentes pai ou o contexto antes de propores alterações.

Entregáveis:
1. Hipóteses ordenadas por probabilidade para os re-renders ou o trabalho em excesso (estado demasiado acima, valor de contexto que muda em cada render, objetos ou funções novos em cada render, listas longas sem virtualização, cálculos caros no render, keys instáveis).
2. Como confirmar cada hipótese com o Profiler das React DevTools (o que gravar, o que observar no flamegraph e em «porque foi renderizado») e, se útil, com o painel Performance do navegador.
3. As correções, da mais simples à mais complexa: descer o estado, passar conteúdo como children, dividir o contexto, useMemo/useCallback/memo só onde a medição o justifique, useDeferredValue ou useTransition para campos de texto, virtualização de listas.
4. Código antes e depois de cada alteração aplicada, com o efeito esperado.
5. Como verificar a melhoria com a mesma medição e que limiar considerar suficiente.
6. O que não fazer: envolver tudo em memo, otimizar sem medir ou sacrificar a legibilidade por ganhos mínimos.

Restrições:
- Não inventes tempos nem ganhos percentuais; se não tiver medições, explica como obtê-las e deixa [PREENCHER].
- Se a versão usar o React Compiler, tem em conta que já memoriza automaticamente e ajusta as recomendações.
- Mantém o comportamento funcional idêntico.

Formato: diagnóstico, plano de medição, alterações com blocos de código e uma lista de verificação final.

Como utilizar

  1. Cola o componente lento e os pais diretos. 2. Descreve o sintoma com precisão (que ação, quanto demora, em que dispositivo). 3. Grava uma sessão do Profiler, cola o que vires e aplica as alterações uma a uma, medindo sempre.

Exemplo de utilização

Código: TabelaEncomendas.tsx com 2000 linhas e um filtro de texto · Sintoma: escrever no filtro tem atraso num portátil de gama média · Medições: nenhuma · Versão: React 18.

Exemplo de resultado

Hipóteses (da mais à menos provável)

  1. Cada tecla filtra as 2000 linhas e volta a renderizá-las todas no mesmo render urgente.
  2. As linhas não estão memoizadas e recebem objetos novos em cada render.
  3. Falta virtualização: o DOM contém as 2000 linhas.

Medir primeiro

No React DevTools → Profiler, grave enquanto escreve 5 letras. Procure commits longos em TabelaEncomendas e ative «Record why each component rendered». Tempo por commit antes da alteração: [PREENCHER].

Alteração 1: separar a escrita da filtragem

import { memo, useDeferredValue, useMemo, useState } from 'react';

export function TabelaEncomendas({ encomendas }: { encomendas: Encomenda[] }) {
  const [filtro, setFiltro] = useState('');
  const filtroDiferido = useDeferredValue(filtro);
  const visiveis = useMemo(
    () => encomendas.filter((e) => e.cliente.toLowerCase().includes(filtroDiferido.toLowerCase())), // [PREENCHER: campo real]
    [encomendas, filtroDiferido],
  );
  return (
    <>
      <input value={filtro} onChange={(ev) => setFiltro(ev.target.value)} aria-label="Filtrar encomendas" />
      <Linhas encomendas={visiveis} />
    </>
  );
}

const Linhas = memo(function Linhas({ encomendas }: { encomendas: Encomenda[] }) {
  return <table><tbody>{encomendas.map((e) => <LinhaEncomenda key={e.id} encomenda={e} />)}</tbody></table>;
});

Assim, o campo atualiza-se de imediato e a lista é recalculada com menor prioridade; o memo evita renderizar de novo as linhas enquanto o valor diferido não muda. Se continuar lento, o passo seguinte é a virtualização…

Dados-chave

Categoria
Programação e desenvolvimento · React
Tipo de resultado
Código
Nível
Avançado
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Código envolvido, Sintoma, Dados de medição e Versão do React
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

Devo usar useMemo e useCallback em todo o lado?

Não. Têm custo próprio e complicam o código. Usa-os quando o Profiler mostrar que um cálculo ou re-render concreto pesa, ou quando for precisa uma referência estável para o memo funcionar.

Quando é preciso virtualizar uma lista?

Quando centenas ou milhares de elementos complexos são renderizados ao mesmo tempo e o Profiler ou o painel Performance mostram que o custo vem de montar esses nós. Em listas curtas raramente compensa.

Para que serve este prompt?

Descubra porque um componente React está lento, meça com o Profiler e aplique as correções certas (posição do estado, memo, virtualização, transições) com código antes e depois.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Código envolvido, Sintoma, Dados de medição e Versão do React). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados