🔍 inp.works

React yeniden render zinciri: bir tıklamanın tüm ağacı yeniden render etmesi

Ne oluyor

React'te bir state güncellemesi bileşeni ve varsayılan olarak tüm çocuklarını yeniden render eder. State ağacın üstünde yaşıyorsa (bir context, sayfa düzeyinde bir store), tek bir tuş veya tıklama yüzlerce bileşeni yeniden render edebilir — çoğu öncekiyle tam olarak aynı şeyi gösterir.

Tek bir render ucuzdur; tek bir işleyicide binlercesi değildir. İş, INP'nin processing time aşamasına düşer.

Nasıl tanınır

Nasıl düzeltilir

Sorun

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

Çözüm

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} />
  </>
}
Sitenizi ücretsiz tarayın →
Advertise here