🔍 inp.works

Cascada de re-renders de React: cuando un clic vuelve a renderizar todo el árbol

Qué ocurre

En React, una actualización de estado vuelve a renderizar el componente y, por defecto, todos sus hijos. Si el estado vive alto en el árbol (un context, un store de nivel de página), una sola pulsación o clic puede volver a renderizar cientos de componentes — la mayoría de los cuales muestran exactamente lo mismo que antes.

Cada render es barato; miles de ellos en un solo manejador no lo son. El trabajo cae en la fase de processing time del INP.

Cómo reconocerlo

Cómo solucionarlo

Problema

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

Solución

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} />
  </>
}
Escanea tu sitio gratis →
Advertise here