🔍 inp.works

Kaskada ponownych renderów React: gdy jedno kliknięcie renderuje całe drzewo

Co się dzieje

W React aktualizacja stanu renderuje ponownie komponent i domyślnie wszystkie jego dzieci. Jeśli stan żyje wysoko w drzewie (kontekst, store na poziomie strony), pojedyncze naciśnięcie klawisza lub kliknięcie może ponownie wyrenderować setki komponentów — z których większość pokazuje dokładnie to samo co wcześniej.

Pojedynczy render jest tani; tysiące w jednej obsłudze już nie. Praca trafia do fazy processing time INP.

Jak rozpoznać

Jak naprawić

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

Poprawka

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} />
  </>
}
Przeskanuj swoją stronę za darmo →
Advertise here