🔍 inp.works

Cascade de re-rendus React : quand un clic re-rend tout l'arbre

Ce qui se passe

En React, une mise à jour d'état re-rend le composant et, par défaut, tous ses enfants. Si l'état vit haut dans l'arbre (un context, un store au niveau de la page), une seule frappe ou un seul clic peut re-rendre des centaines de composants — dont la plupart affichent exactement la même chose qu'avant.

Chaque rendu est peu coûteux ; des milliers dans un seul gestionnaire ne le sont pas. Le travail tombe dans la phase de processing time de l'INP.

Comment le reconnaître

Comment corriger

Problème

const Page = () => {
  const [query, setQuery] = useState("")
  // every keystroke re-renders Page → Header, Sidebar, BigTable, Footer
  return <>
    <SearchInput value={query} onChange={setQuery} />
    <BigTable rows={filterRows(rows, query)} />
  </>
}

Correctif

const BigTable = React.memo(({ rows }) => /* ... */)

const Page = () => {
  const [query, setQuery] = useState("")
  const [isPending, startTransition] = useTransition()
  const rows = useMemo(() => filterRows(allRows, query), [query])
  const onChange = (q) =>
    startTransition(() => setQuery(q))  // input paints first, table follows
  return <>
    <SearchInput onChange={onChange} />
    <BigTable rows={rows} />
  </>
}
Analysez votre site gratuitement →
Advertise here