Implementando View Transition con React

🚀 Qué es View Transition y por qué usarlo?
Las View Transitions son una nueva API de animación experimental en React 19 que nos permite animar transiciones entre elementos de manera fluida y eficiente, sin necesidad de bibliotecas adicionales como Framer Motion. Esta funcionalidad mejora la experiencia de usuario al hacer cambios de estado o de vista en una aplicación web.
Otro punto a tener en cuenta es que podemos habilitar el uso de la nueva API de View Transitions en Next.js a partir de la versión 15.2. Esto lo realizamos de la siguiente manera:
module.exports = {
experimental: {
viewTransition: true,
},
};
📖 Nota: Esta función es altamente experimental y puede cambiar en futuras versiones.
📦 Instalación de dependencias
Asegúrate de que tu package.json
tiene las versiones correctas:
"dependencies": {
"next": "^15.2.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"devDependencies": {
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
}
Implementando View Transition en React
Actualmente debemos importar el componente experimental llamado unstable_ViewTransition
, así que podríamos realizar lo siguiente:
import { unstable_ViewTransition as ViewTransition } from "react";
🛠 Cómo lo utilizamos?
En el componente que queramos agregar la transición inicial lo envolveremos con el componente ViewTransition
<ViewTransition name="hero-image">
<Image
src="/images/example.webp"
width={200}
height={200}
className="object-cover"
alt="Picture of the author"
priority
/>
</ViewTransition>
Luego volvemos a referenciar el mismo elemento pero en cualquier otra posición y diseño, por ejemplo a continuación transicionaremos la imagen del hero hacia la imagen del avatar de un post:
<ViewTransition name="hero-image">
<Author username={post.author} />
</ViewTransition>
🔑 Cómo funciona name en ViewTransition?
La clave para que ViewTransition funcione es el atributo name
. React usará este identificador para relacionar la versión inicial y la versión final del elemento y generar la animación de transición.
<ViewTransition name="profile-picture">
<Image src="/images/avatar.webp" width={100} height={100} alt="Avatar" />
</ViewTransition>
Si más adelante en la misma página u otra vista referenciamos este mismo name
, React aplicará una animación suave entre ambos estados.
🎥 Demo en acción
Aquí en mi sitio web puedes ver una demo en vivo de cómo funcionan las View Transitions
Puedes ver más ejemplos utilizados en mi repositorio de código
🚨 Limitaciones y consideraciones
- No todos los navegadores la soportan aún → Actualmente, View Transitions solo funcionan en navegadores basados en Chromium como Chrome 111+ y Edge.
- No funciona con elementos dentro de
<canvas>
o<iframe>
. - Solo funciona en el mismo árbol del DOM → Si el componente se desmonta completamente, la transición no ocurrirá.
- Puede cambiar en futuras versiones de React → Es una API experimental y su implementación podría cambiar en versiones futuras.
Cómo degradar en navegadores no compatibles?
Si el navegador no soporta View Transitions, podemos hacer un fallback manual:
if (!document.startViewTransition) {
console.warn("View Transitions no está soportado en este navegador.");
// Aquí puedes implementar una alternativa, como animaciones CSS o Framer Motion.
}
Gracias a la comunidad y al equipo de React por facilitarnos tanto el desarrollo de animaciones tan preciosas ✨