0Pricing
React Academy · Aula

Seletores e prevenção de novas renderizações desnecessárias

Extraia partes específicas do estado por meio de seletores para que os componentes só sejam renderizados novamente quando necessário.

Seletores e prevenção de novas renderizações desnecessárias é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Boas-vindas

Nesta lição, você usará seletores do Zustand para inscrever os componentes somente nas fatias de estado de que precisam, evitando renderizações desnecessárias quando outras partes do store mudarem.

O problema do seletor padrão

Chamar o hook do store sem um seletor retorna o objeto completo do store. O componente é renderizado novamente a cada alteração no store, até mesmo quando mudam partes do estado que não têm relação com ele.
// Bad: re-renders on every store change
const store = useAppStore();
return <p>{store.user.name}</p>;

Usando um seletor

Passe uma função seletora ao hook do store. O componente só será renderizado novamente quando o valor retornado pelo seletor mudar.
// Good: re-renders only when user.name changes
const name = useAppStore(s => s.user.name);
return <p>{name}</p>;

Verificação de igualdade por referência

O Zustand usa igualdade estrita (===) por padrão. Se o seu seletor retornar um novo objeto ou matriz a cada chamada, o componente será renderizado novamente mesmo quando o conteúdo for igual.
// Creates a new object every time — always re-renders!
const info = useStore(s => ({ id: s.id, name: s.name }));

Corrigindo com igualdade superficial

Importe `shallow` do Zustand e passe-o como função de igualdade para evitar renderizações novamente quando o conteúdo dos objetos for igual.
import { shallow } from 'zustand/shallow';

const info = useAppStore(
  s => ({ id: s.id, name: s.name }),
  shallow // compare by content, not reference
);

Selecionando vários valores

Use o padrão de igualdade superficial para selecionar vários valores de uma só vez sem causar renderizações novamente desnecessárias.
const { items, loading } = useCartStore(
  s => ({ items: s.items, loading: s.loading }),
  shallow
);

Referências estáveis das ações

As ações, que são funções, têm referências estáveis no Zustand: elas não mudam quando o estado é atualizado. Você pode selecioná-las sem igualdade superficial, e elas não causarão renderizações novamente.
// Actions are always stable — no shallow needed
const addToCart = useCartStore(s => s.addToCart);

Auxiliar useShallow (Zustand v5+)

O Zustand v5 fornece o utilitário useShallow, que envolve automaticamente o seletor com igualdade superficial e deixa o código mais limpo.
import { useShallow } from 'zustand/react/shallow';

const { items, loading } = useCartStore(
  useShallow(s => ({ items: s.items, loading: s.loading }))
);

Combinando seletores

Derive valores calculados dentro dos seletores para evitar armazenar estado derivado no store. Calcule totais, listas filtradas ou textos formatados no seletor.
const totalPrice = useCartStore(
  s => s.items.reduce((sum, item) => sum + item.price, 0)
);

Analisando renderizações novamente no Zustand

Use o Profiler do React DevTools para verificar se os seletores estão funcionando. Depois de adicionar ao store um item sem relação, confirme que o componente que usa apenas o seletor de nome NÃO aparece no gráfico de chamas do commit.

Verificação rápida

Por que você precisa usar igualdade superficial quando um seletor do Zustand retorna um objeto?

Recapitulação

Sempre use seletores específicos. Use igualdade superficial ao selecionar vários valores como um objeto. Derive valores calculados dentro dos seletores. As ações têm referências estáveis e não precisam de igualdade superficial.

A seguir

Próxima lição: **Persistindo o estado com a camada intermediária persist** — você sincronizará o estado do Zustand com localStorage usando a camada intermediária persist.

Perguntas Frequentes

A aula “Seletores e prevenção de novas renderizações desnecessárias” é grátis?

Sim — o texto completo de “Seletores e prevenção de novas renderizações desnecessárias” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Seletores e prevenção de novas renderizações desnecessárias”?

Extraia partes específicas do estado por meio de seletores para que os componentes só sejam renderizados novamente quando necessário. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Seletores e prevenção de novas renderizações desnecessárias”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando seu primeiro armazenamento Zustand
  2. Seletores e prevenção de novas renderizações desnecessárias
  3. Persistindo o estado com o middleware persist
  4. DevTools do Zustand e testes de armazenamentos
← Voltar para React Academy