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 Música 1
Esta es una descripción detallada para el elemento de música 1.
Música
$661
Elemento de Tecnología 2
Esta es una descripción detallada para el elemento de tecnología 2.
Tecnología
$996
Elemento de Música 3
Esta es una descripción detallada para el elemento de música 3.
Música
$561
Elemento de Deportes 4
Esta es una descripción detallada para el elemento de deportes 4.
Deportes
$786
Elemento de Arte 5
Esta es una descripción detallada para el elemento de arte 5.
Arte
$445
Elemento de Deportes 6
Esta es una descripción detallada para el elemento de deportes 6.
Deportes
$892
Elemento de Ciencia 7
Esta es una descripción detallada para el elemento de ciencia 7.
Ciencia
$275
Elemento de Deportes 8
Esta es una descripción detallada para el elemento de deportes 8.
Deportes
$426
Elemento de Arte 9
Esta es una descripción detallada para el elemento de arte 9.
Arte
$870
Elemento de Tecnología 10
Esta es una descripción detallada para el elemento de tecnología 10.
Tecnología
$535
Elemento de Música 11
Esta es una descripción detallada para el elemento de música 11.
Música
$163
Elemento de Música 12
Esta es una descripción detallada para el elemento de música 12.
Música
$874
Elemento de Música 13
Esta es una descripción detallada para el elemento de música 13.
Música
$862
Elemento de Música 14
Esta es una descripción detallada para el elemento de música 14.
Música
$192
Elemento de Música 15
Esta es una descripción detallada para el elemento de música 15.
Música
$902
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>
  )
}
Built with v0