0Pricing
React Academy · Lección

useTransition para actualizaciones de UI no bloqueantes

Envuelva las actualizaciones de estado costosas en startTransition para que la UI siga respondiendo.

useTransition para actualizaciones de UI no bloqueantes es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Bienvenida

En esta lección usará el hook useTransition para marcar las actualizaciones de estado costosas como no urgentes y mantener la interfaz receptiva mientras se realiza un renderizado pesado en segundo plano.

El problema de las actualizaciones bloqueantes

Cuando escribe en un cuadro de búsqueda que filtra una lista grande, React debe volver a renderizar toda la lista filtrada en cada pulsación de tecla. Esto impide que la entrada se actualice de inmediato y hace que la interfaz parezca lenta.

Modo concurrente de React

React 18 introdujo el renderizado concurrente: React puede comenzar a renderizar una actualización de estado, pausarla y dar prioridad a las actualizaciones más urgentes, como escribir. useTransition es el hook que permite clasificar las actualizaciones como transiciones de baja prioridad.

Conceptos básicos de useTransition

useTransition devuelve `[isPending, startTransition]`. Envuelva la actualización de estado no urgente dentro de `startTransition()`. React dará prioridad a otras actualizaciones, como las de una entrada controlada, frente a la transición.
const [isPending, startTransition] = useTransition();

const handleChange = (e) => {
  setInputValue(e.target.value); // urgent: update input immediately
  startTransition(() => {
    setFilteredList(filter(e.target.value)); // non-urgent
  });
};

isPending para la interfaz de carga

Mientras se procesa la transición, `isPending` es `true`. Úselo para mostrar un indicador de carga o atenuar la lista de resultados obsoleta, de modo que los usuarios sepan que hay una actualización en curso.
return (
  <>
    <input value={inputValue} onChange={handleChange} />
    {isPending && <Spinner />}
    <ResultList items={filteredList} />
  </>
);

Qué debe incluir startTransition

Incluya únicamente actualizaciones de estado dentro de startTransition, no operaciones asíncronas. Debe envolver la actualización de estado que desencadena el renderizado costoso.
// Correct
startTransition(() => setTab('heavy'));

// Wrong — async work outside React state
startTransition(async () => { await fetch(...); }); // not supported

startTransition sin el hook

Si no necesita `isPending`, puede importar y llamar directamente a `startTransition` desde React sin usar el hook.
import { startTransition } from 'react';

startTransition(() => setQuery(newValue));

Ejemplo de cambio de pestañas

Un caso de uso habitual consiste en que al hacer clic en una pestaña se cambie un componente pesado. Envuelva el cambio de pestaña en startTransition para que el indicador de la pestaña activa se actualice de inmediato mientras el componente pesado se renderiza en segundo plano.
const [tab, setTab] = useState('posts');
const [isPending, startTransition] = useTransition();

const selectTab = (t) =>
  startTransition(() => setTab(t));

useTransition frente a useDeferredValue

useTransition se utiliza cuando USTED controla la actualización de estado (llama a setState). useDeferredValue se utiliza cuando recibe una prop o un valor cuyo retraso no puede controlar directamente: retrasa el valor en sí.

No sustituye a la optimización

startTransition no hace que el renderizado sea más rápido; simplemente lo retrasa. Si un componente tarda 500 ms en renderizarse, seguirá tardando 500 ms. Combínelo con React.memo o la virtualización para listas realmente lentas.

Comprobación rápida

¿Qué representa isPending en useTransition?

Resumen

useTransition permite clasificar las actualizaciones de estado como transiciones no urgentes. Las actualizaciones urgentes, como las de una entrada, se renderizan de inmediato; las transiciones se renderizan cuando React tiene capacidad. Use isPending para mostrar información de carga.

A continuación

Siguiente lección: **useDeferredValue para aplicar debounce a las entradas**: retrasará el renderizado de las partes lentas de la interfaz mientras mantiene la entrada ágil.

Preguntas frecuentes

¿La lección «useTransition para actualizaciones de UI no bloqueantes» es gratis?

Sí — el texto completo de «useTransition para actualizaciones de UI no bloqueantes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «useTransition para actualizaciones de UI no bloqueantes»?

Envuelva las actualizaciones de estado costosas en startTransition para que la UI siga respondiendo. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «useTransition para actualizaciones de UI no bloqueantes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Condiciones de carrera y limpieza de efectos
  2. useTransition para actualizaciones de UI no bloqueantes
  3. useDeferredValue para aplicar debounce a entradas
  4. Suspense para límites de datos y código
← Volver a React Academy