Dicas para evitar re-renderizações com React.memo

Entenda como React.memo pode melhorar a performance da sua aplicação evitando re-renderizações desnecessárias.

O que é React.memo?

React.memo é uma função de ordem superior que permite memorizar componentes funcionais, evitando re-renderizações desnecessárias. Isso significa que, se as propriedades de um componente não mudarem entre as renderizações, o React pode reutilizar a saída anterior, melhorando a performance da sua aplicação.

Quando utilizar React.memo?

Utilizar React.memo é ideal quando temos componentes que recebem propriedades que não mudam com frequência. Por exemplo, em uma lista de itens, se a maioria deles permanece estável, podemos otimizar o desempenho da renderização.

Como utilizar React.memo?

Abaixo, veja um exemplo simples de como aplicar o React.memo:

import React from 'react';

const MeuComponente = React.memo(({ texto }) => {
    return <div>{texto}</div>;
});

export default MeuComponente;

Neste exemplo, o componente MeuComponente receberá uma propriedade chamada texto. Ao usar React.memo, o componente só será re-renderizado se o valor de texto mudar. Caso contrário, o React irá reutilizar a saída anterior, economizando recursos.

Comparando propriedades

O React.memo também aceita uma função de comparação como segundo argumento. Essa função pode ser utilizada para definir regras mais complexas sobre quando o componente deve ser re-renderizado. Veja:

const MeuComponente = React.memo(({ texto }) => {
    return <div>{texto}</div>;
}, (prevProps, nextProps) => {
    return prevProps.texto === nextProps.texto;
});

Neste caso, o componente só será re-renderizado se o texto recebido mudar. Essa abordagem é útil em situações onde as propriedades são objetos ou arrays e precisamos de um controle mais preciso sobre a comparação.

Exemplos de aplicação

Vamos considerar um aplicativo que exibe uma lista de usuários. Se tivermos um componente para cada usuário e um componente pai que atualiza frequentemente, podemos usar React.memo para evitar re-renderizações desnecessárias dos componentes de usuário.

const Usuario = React.memo(({ nome }) => {
    console.log(`Renderizando ${nome}`);
    return <div>{nome}</div>;
});

const ListaDeUsuarios = ({ usuarios }) => {
    return (
        <div>
            {usuarios.map(usuario => <Usuario key={usuario.id} nome={usuario.nome} />)}
        </div>
    );
};

A função Usuario só será re-renderizada se o nome do usuário mudar, o que é uma ótima maneira de otimizar listas grandes.

Considerações finais

Embora o React.memo seja uma ferramenta poderosa, é importante usá-la com sabedoria. Em alguns casos, a sobrecarga de comparação de propriedades pode ser maior que o ganho em performance. Portanto, sempre faça testes de performance antes e depois de aplicar otimizações.

Conclusão

Dominar o uso do React.memo é essencial para desenvolvedores que desejam escrever aplicações React eficientes. Ao evitar re-renderizações desnecessárias, você não apenas melhora a performance, mas também proporciona uma melhor experiência ao usuário. Ao implementar estas técnicas, sua aplicação pode se tornar mais responsiva e escalável.

Utilizar React.memo é uma das várias técnicas para otimizar a performance de aplicações React. Ao memorizar componentes, é possível evitar re-renderizações desnecessárias, o que é especialmente útil em aplicativos com muitos componentes dinâmicos. Essa prática não apenas melhora a experiência do usuário, mas também ajuda a economizar recursos do sistema. Portanto, conhecer e aplicar React.memo é um passo importante na jornada de um desenvolvedor React.

Algumas aplicações:

  • Listas de itens estáticos
  • Componentes que recebem dados de APIs
  • Formulários com campos que não mudam frequentemente

Dicas para quem está começando

  • Comece utilizando React.memo em componentes que não precisam ser re-renderizados frequentemente.
  • Teste o impacto no desempenho com e sem o uso de React.memo.
  • Fique atento ao uso excessivo, pois pode trazer mais complexidade ao seu código.

Contribuições de Gabriel Nogueira

Compartilhe este tutorial: Como utilizar React.memo para evitar re-renderizações desnecessárias?

Compartilhe este tutorial

Continue aprendendo:

Como tornar um menu dropdown acessível no React?

Descubra como criar menus dropdown que atendem às diretrizes de acessibilidade no React.

Tutorial anterior

Como usar reselect para otimizar estados globais no Redux?

Entenda como utilizar reselect para otimizar a performance do Redux em suas aplicações React.

Próximo tutorial