🔍 inp.works

React-Re-Render-Kaskade: wenn ein Klick den ganzen Baum neu rendert

Was passiert

In React rendert ein State-Update die Komponente und standardmäßig alle ihre Kinder neu. Lebt der State hoch im Baum (ein Context, ein Store auf Seitenebene), kann ein einzelner Tastendruck oder Klick Hunderte Komponenten neu rendern — die meisten zeigen genau dasselbe wie zuvor.

Ein Render ist billig; Tausende in einem Event-Handler nicht. Die Arbeit landet in der Processing-Time-Phase des INP.

So erkennst du es

So behebst du es

Problem

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)} />
  </>
}

Lösung

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} />
  </>
}
Scanne deine Website kostenlos →
Advertise here