Las animaciones de layout de Reanimated manejan declarativamente cambios de entrada, salida y layout. Los elementos se desvanecen o se deslizan cuando se añaden, colapsan cuando se eliminan y se deslizan cuando las listas se reordenan - sin setState en cada fotograma.
Tarjeta de referencia rápida - lista para copiar y pegar.
npx expo install react-native-reanimated
import Animated, { FadeIn, FadeOut, Layout } from "react-native-reanimated";export function AnimatedListItem({ children }: { children: React.ReactNode }) { return ( <Animated.View entering={FadeIn.duration(220)} exiting={FadeOut.duration(180)} layout={Layout.springify()} > {children} </Animated.View> );}
// Desliza desde el borde de arrastre - común para filas de bandeja de entradaimport { SlideInRight, SlideOutLeft } from "react-native-reanimated";<Animated.View entering={SlideInRight.springify()} exiting={SlideOutLeft.duration(200)} />
Cuándo usarlo:
Listas de tareas, burbujas de chat y feeds de notificaciones con inserción/eliminación
Chips de filtro que aparecen/desaparecen al alternar categorías
Reorden de grid después de arrastrar y soltar (con Layout en hermanos)
Secciones de acordeón expandiéndose/colapsando con reflow de hermanos
Usando react-native Animated.View - Las props de entrada/salida se ignoran. Solución: Importa Animated desde react-native-reanimated.
Sin salida en ScrollView map sin cambio de clave - El reconciliador de React reutiliza nodos. Solución: Elimina el elemento del array de estado para que React desmonte la fila.
Claves de índice en listas - Se anima la fila incorrecta al eliminar. Solución: IDs de cadena estables en keyExtractor.
layout en cada Text anidado - Anima la tipografía interior excesivamente. Solución: Un contenedor Animated.View por fila.
Escalonamiento de entrada enorme - Lista de 200 elementos cada uno retrasa 50ms - la interfaz de usuario se siente congelada. Solución: Escalonamiento solo de la primera pantalla (index < 12).
Combinando Layout con grids flex wrap - Saltos inesperados cuando los saltos de línea cambian. Solución: Anchos de celda fijos o medir con onLayout antes de animar.
Desmonte modal corta la salida - El padre desaparece antes de que se complete la salida. Solución: Retrasa el navegador pop hasta que dure exiting (runOnJS + timeout).
¿Cómo instalo animaciones de layout en Expo SDK 57?
npx expo install react-native-reanimated
Las animaciones de layout se incluyen con Reanimated 4 - sin paquete adicional. Confirma que el plugin de Babel es el último en babel.config.js.
¿Por qué no se ejecuta la salida en mi FlatList?
El elemento aún existe en data - solo te desplazaste.
La fila se desmontó sin prop exiting en un componente Reanimated.
La lista padre se remontó (cambio de clave en FlatList) - salida cancelada.
¿FadeIn o SlideInRight para filas de feed?
FadeIn / FadeInDown para feeds densos (menos ruido visual).
SlideInRight para listas de bandeja de entrada/acción donde la metáfora direccional ayuda.
¿Qué hace layout={Layout.springify()}?
Cuando las vistas hermanas cambian de posición o tamaño, la vista se anima a su nueva caja de layout con una curva de física de resorte en lugar de saltar instantáneamente.
¿Puedo usar duraciones personalizadas por sistema de diseño?
¿Funcionan las animaciones de layout con FlashList?
A menudo sí con un contenedor Animated.View, pero la entrada pesada en desplazamiento rápido puede causar problemas de rendimiento - perfila en Android. Desactiva la entrada para la precarga fuera de pantalla si es necesario.
¿Cómo interactúan las animaciones de layout con deslizar para eliminar?
Desencadena la eliminación del estado al final del deslizamiento; exiting maneja el colapso. Coordina con Resolución de Conflictos de Gestos para que el desplazamiento y el deslizamiento no luchen.