Carregando agora

Como Otimizar o Desempenho da Sua Aplicação React: Dicas Práticas e Exemplos

Performance em React é um daqueles assuntos que é tipo fila de mercado: você pode ignorar até certo ponto, mas eventualmente vai precisar encarar. E quando a aplicação começa a engasgar, ninguém quer ser o dev que “resolve” jogando um useMemo aleatório e rezando.

Pra evitar esse destino trágico, se liga nessas boas práticas com exemplos claros. Bora lá:

1. Evite Renderizações Desnecessárias

React é baseado no conceito de componentes reativos, mas nem sempre ele sabe o que você quer. Um update em um estado ou prop pode causar re-renderizações em componentes que nem precisavam.

Dica: Use React.memo

Se seu componente só precisa atualizar quando suas props mudam, envolva ele com React.memo.

import React from "react";

const MeuComponente = React.memo(({ nome }) => {
  console.log("Renderizando", nome);
  return <div>Olá, {nome}!</div>;
});

export default MeuComponente;

Quando usar: Quando as props são simples e você tem certeza que não precisa de uma checagem profunda.

Dica Avançada: Otimize com useCallback e useMemo

Funções passadas como props também podem causar re-renders. Use useCallback pra memorizar elas.

const MinhaApp = () => {
  const [contador, setContador] = React.useState(0);

  const incrementar = React.useCallback(() => {
    setContador((prev) => prev + 1);
  }, []);

  return <Botao onClick={incrementar} />;
};

const Botao = React.memo(({ onClick }) => {
  console.log("Botão renderizado");
  return <button onClick={onClick}>Clique aqui</button>;
});

2. Divida Componentes e Use Lazy Loading

Sabe aquela página que tem “tudo e mais um pouco”? Renderizar tudo de uma vez é receita pra lag.

Dica: Componentes Menores e Bem Definidos

Evite criar componentes gigantes. Quebre as responsabilidades em pedaços menores e reutilizáveis.

Dica: Importação Dinâmica com React.lazy

Carregue componentes pesados só quando realmente forem necessários.

import React, { Suspense } from "react";

const ComponentePesado = React.lazy(() => import("./ComponentePesado"));

const App = () => {
  return (
    <Suspense fallback={<div>Carregando...</div>}>
      <ComponentePesado />
    </Suspense>
  );
};

Nota: Sempre use um fallback em Suspense pra evitar telas brancas enquanto o componente carrega.


3. Use Chaves (Keys) Corretamente

O React usa keys pra identificar componentes únicos em listas. Se você não usar direito, ele pode acabar recriando elementos desnecessariamente.

// Exemplo ruim:
const listaItens = itens.map((item) => <li>{item.nome}</li>);

// Exemplo bom:
const listaItens = itens.map((item) => <li key={item.id}>{item.nome}</li>);

4. Evite Renderizar Tudo no Estado Inicial

Na inicialização, carregue apenas o essencial. Dados ou elementos secundários podem esperar um pouco.

Dica: Carregue Dados em Background

import React, { useEffect, useState } from "react";

const MinhaApp = () => {
  const [dados, setDados] = useState(null);

  useEffect(() => {
    const buscarDados = async () => {
      const resposta = await fetch("/api/dados");
      const resultado = await resposta.json();
      setDados(resultado);
    };

    buscarDados();
  }, []);

  if (!dados) return <div>Carregando...</div>;

  return <div>{JSON.stringify(dados)}</div>;
};

5. Cuidado com Dependências no useEffect

O React é exigente com dependências no useEffect. Se você não prestar atenção, pode acabar com loops infinitos ou execuções desnecessárias.

Dica: Declare Dependências de Forma Clara

useEffect(() => {
  console.log("Executando!", algumValor);
}, [algumValor]); // Só roda quando 'algumValor' mudar

Erro comum: Declarar arrays vazias [] sem entender que isso significa “só execute uma vez”.



6. Use Ferramentas de Monitoramento

Se você não consegue medir, você não consegue melhorar. Use o que React oferece pra identificar problemas de performance.

Ferramentas Recomendadas:

  • React DevTools: Identifica componentes que estão re-renderizando demais.
  • Profiler API: Mede tempos de renderização e identifica gargalos.
import { Profiler } from "react";

const App = () => {
  const logProfiler = (id, phase, actualTime, baseTime, startTime, commitTime) => {
    console.log({ id, phase, actualTime, baseTime, startTime, commitTime });
  };

  return (
    <Profiler id="App" onRender={logProfiler}>
      <MinhaApp />
    </Profiler>
  );
};

Conclusão

Otimizar aplicações React é menos sobre “usar todas as ferramentas” e mais sobre entender o que realmente está causando problemas. Então, antes de sair jogando useMemo como se fosse glitter, invista um tempo identificando os gargalos reais.

Como diria um dev experiente: “Se você não mede, você está chutando.” Bora codar melhor e evitar os engasgos!

Angular performance Angular Signals Apps Multiplataforma automação de tarefas Backend Boas Práticas boas práticas Git controle de versão desenvolvedores desenvolvimento backend Desenvolvimento de Software Desenvolvimento Frontend Desenvolvimento Mobile Desenvolvimento Web desenvolvimento ágil devops dicas para devs escalabilidade ferramentas de Git ferramentas de programação Front-end Git Hooks integração contínua inteligência artificial JavaScript Linguagens de Programação Media Queries mercado de tecnologia Mercado de Trabalho Tech Node.js produtividade dev Programação Programação Orientada a Objetos programação para iniciantes programação reativa Python React React Suspense Rust Tecnologia Trunk-Based Development web development workflow Git workflows Git

Publicar comentário

O que temos aqui?