Se houverem alterações, vai atualizar o que alterou;
ONDE USAR o memo?
Pure Functional Components;
Renders too often (que renderizam muitas vezes);
Re-renders with same props (que renderizam com mesmas props);
Medium to big/large components (que renderizam muitos filhos);
useMemo / useCallback
useMEMO:
Cálculos pesados;
Igualdade referencial (quando a gente repassa aquela informação a um componente filho);
useCALLBACK:
Usado apenas para armazenar uma função. Apenas para igualdade referencial "na memória".
Dicas:
Formatar valores antes do componente renderizar e evitar formatar dentro do JSX.
Usar a biblioteca react-virtualized
Dynamic import (Code Splitting) é tipo um Lazy Load, ver código abaixo [ver ProductItem.tsx para mais infos]:
// No next.js é este:importdynamicfrom"next/dynamic";constAddProductToWishlist=dynamic<AddProductToWishlistProps>(()=>{returnimport("./AddProductToWishlist"),then(mod=>mod.AddProductToWishlist)});// No react é o lazy:import{lazy}from"react";constAddProductToWishlist=lazy(()=>import("./AddProductToWishlist"));<Suspensefallback={<p>rendering...</p>}><AddProductToWishlistonAddToWishlist={()=>onAddToWishlist(product.id)}onRequestClose={()=>setIsAddingToWisthlist(false)}/></Suspense>
// E suporta apenas export DEFAULT da função// Não precisa passar a tipagem, já vem dentro// MAS tem que usa ro Suspense