Hook useTransition
Marca actualizaciones de estado como no urgentes para mantener tu UI responsiva
¿Qué es useTransition?
useTransition te permite actualizar el estado sin bloquear la UI. Devuelve un valor de estado para el estado pendiente de la transición, y una función para iniciarla.
Conceptos Clave:
- isPending: Booleano que indica si hay una transición pendiente
- startTransition: Función para marcar actualizaciones de estado como transiciones
- No bloqueante: Las transiciones no bloquean las interacciones del usuario
- Interrumpible: Nuevas transiciones pueden interrumpir las que están en curso
Cuándo Usar useTransition:
- Cambiar entre pestañas con contenido pesado
- Filtrar u ordenar conjuntos de datos grandes
- Navegación entre rutas
- Cualquier actualización de estado que pueda causar retraso
Ejemplo 1: Navegación por Pestañas
Cambia entre pestañas con contenido pesado sin bloquear la UI
Publicacione 1
Este es el contenido para el elemento publicaciones número 1. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 2
Este es el contenido para el elemento publicaciones número 2. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 3
Este es el contenido para el elemento publicaciones número 3. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 4
Este es el contenido para el elemento publicaciones número 4. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 5
Este es el contenido para el elemento publicaciones número 5. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 6
Este es el contenido para el elemento publicaciones número 6. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 7
Este es el contenido para el elemento publicaciones número 7. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 8
Este es el contenido para el elemento publicaciones número 8. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 9
Este es el contenido para el elemento publicaciones número 9. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 10
Este es el contenido para el elemento publicaciones número 10. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 11
Este es el contenido para el elemento publicaciones número 11. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 12
Este es el contenido para el elemento publicaciones número 12. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 13
Este es el contenido para el elemento publicaciones número 13. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 14
Este es el contenido para el elemento publicaciones número 14. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 15
Este es el contenido para el elemento publicaciones número 15. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 16
Este es el contenido para el elemento publicaciones número 16. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 17
Este es el contenido para el elemento publicaciones número 17. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 18
Este es el contenido para el elemento publicaciones número 18. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 19
Este es el contenido para el elemento publicaciones número 19. Contiene información detallada que normalmente se obtendría de una API.
Publicacione 20
Este es el contenido para el elemento publicaciones número 20. Contiene información detallada que normalmente se obtendría de una API.
Y 130 publicaciones más...
Ejemplo 2: Filtrado de Lista
Filtra una lista grande manteniendo la UI responsiva
Mostrando 200 elementos
Elemento de Tecnología 1
Esta es una descripción detallada para el elemento de tecnología 1.
Tecnología
$296
Elemento de Música 2
Esta es una descripción detallada para el elemento de música 2.
Música
$351
Elemento de Ciencia 3
Esta es una descripción detallada para el elemento de ciencia 3.
Ciencia
$106
Elemento de Tecnología 4
Esta es una descripción detallada para el elemento de tecnología 4.
Tecnología
$869
Elemento de Tecnología 5
Esta es una descripción detallada para el elemento de tecnología 5.
Tecnología
$442
Elemento de Arte 6
Esta es una descripción detallada para el elemento de arte 6.
Arte
$833
Elemento de Deportes 7
Esta es una descripción detallada para el elemento de deportes 7.
Deportes
$794
Elemento de Tecnología 8
Esta es una descripción detallada para el elemento de tecnología 8.
Tecnología
$24
Elemento de Tecnología 9
Esta es una descripción detallada para el elemento de tecnología 9.
Tecnología
$541
Elemento de Deportes 10
Esta es una descripción detallada para el elemento de deportes 10.
Deportes
$45
Elemento de Deportes 11
Esta es una descripción detallada para el elemento de deportes 11.
Deportes
$869
Elemento de Música 12
Esta es una descripción detallada para el elemento de música 12.
Música
$864
Elemento de Ciencia 13
Esta es una descripción detallada para el elemento de ciencia 13.
Ciencia
$411
Elemento de Arte 14
Esta es una descripción detallada para el elemento de arte 14.
Arte
$327
Elemento de Ciencia 15
Esta es una descripción detallada para el elemento de ciencia 15.
Ciencia
$243
Y 185 elementos más...
Implementación del Código
'use client'
import { useTransition, useState } from 'react'
export default function DemoPestañas() {
const [isPending, startTransition] = useTransition()
const [pestañaActiva, setPestañaActiva] = useState('pestaña1')
const manejarCambioPestaña = (pestaña: string) => {
startTransition(() => {
setPestañaActiva(pestaña)
})
}
return (
<div>
<div className="flex space-x-2">
{pestañas.map(pestaña => (
<button
key={pestaña.id}
onClick={() => manejarCambioPestaña(pestaña.id)}
disabled={isPending}
className={pestañaActiva === pestaña.id ? 'active' : ''}
>
{pestaña.etiqueta}
</button>
))}
</div>
{isPending && <div>Cargando...</div>}
<div className="contenido-pestaña">
{/* Renderizado de contenido pesado */}
<ContenidoPesado pestañaId={pestañaActiva} />
</div>
</div>
)
}