Saltar al contenido principal
Mobile Guías

Lottie React Native

Nuestra guía completa te enseña a utilizar lottie react native. Cubre los flujos de trabajo de Expo y bare, controles de animación, ajuste de rendimiento y mejores prácticas para 2026.

Martin Donadieu

Martin Donadieu

Gerente de Contenido

Lottie React Native

Probablemente estás en uno de dos lugares en este momento. O tienes un diseñador que te está entregando un Lottie JSON y te está pidiendo, “¿Podemos meter esto en la aplicación hoy?”, o ya lo has cableado y has notado que la animación funciona en el desarrollo pero comienza a sentirse caro una vez que los dispositivos reales, el tiempo de arranque y los paquetes de lanzamiento entran en juego.

Eso es donde Lottie React Native se vuelve interesante. La demo básica es fácil. La implementación lista para producción no lo es. La diferencia suele venir de cómo lo instalas, cómo controlas la reproducción y si tratas los archivos de animación como activos inocuos o como parte de tu presupuesto de rendimiento.

Índice

¿Por qué Lottie es esencial para aplicaciones de React Native?

Si alguna vez has intentado recrear una animación de producto pulida a mano en React Native, ya sabes el dolor. Los detalles de movimiento pequeños se convierten en una pila de lógica de tiempo, interpolaciones y peculiaridades de plataforma. La animación puede parecer cercana, pero 'cercana' generalmente no es lo que el diseñador envió.

Lottie cambió ese flujo de trabajo. Airbnb abrió Lottie en 2016 y ese lanzamiento cambió la animación móvil permitiendo a los diseñadores enviar animaciones directamente en lugar de obligar a los ingenieros a reconstruirlos frame por frame. En algunos entornos empresariales, ese cambio redujo los costos de desarrollo de aplicaciones móviles en hasta un 40%según Resumen de Lottie de Airbnb.

El diseño y la ingeniería dejan de luchar por la misma batalla

Un beneficio clave de Lottie React Native no es solo 'animaciones bonitas en JSON'. Es la separación de preocupaciones. Los diseñadores trabajan en After Effects y exportan con Bodymovin. Los desarrolladores renderizan el resultado con reproducción respaldada por nativo en lugar de traducir la movimiento en code personalizado.

Importa porque el trabajo de animación tiene el hábito de extenderse. Una sola animación de estado celebratoria puede tocar la revisión de diseño, la revisión del producto, el comportamiento de Android, el comportamiento de iOS, la accesibilidad y el rendimiento de inicio. Lottie reduce esa superficie de trabajo.

Regla práctica: Usa Lottie cuando la animación es parte de la experiencia del producto, no cuando solo necesitas una transición de opacidad o traducción simple.

También hay un ángulo de experiencia del usuario. La animación proporciona retroalimentación, confirma acciones y hace que los estados de carga se sientan menos muertos. Si su equipo está pensando en serio en la pulcritud, la retención o la confianza en la interfaz, la animación es parte de esa conversación. La discusión más amplia discusión de la experiencia del usuario de la aplicación generalmente termina en el mismo lugar: la retroalimentación rápida supera a las pantallas estáticas.

Dónde Lottie se ajusta mejor

Lottie React Native tiende a funcionar mejor para:

  • Micro-interacciones personalizadas como likes, guarda, checkmarks y estados de éxito de compra
  • Ilustraciones de inicio de sesión que necesitan sentirse personalizadas sin enviar video
  • Estados de carga y vacíos donde la interfaz UI estática se siente inacabada
  • Educación de características When el producto quiere movimiento sin incrustar GIFs o MP4s

No resuelve todos los problemas de animación. Para transiciones de pantalla básicas, las herramientas de animación de React Native suelen ser más simples. Para sistemas de movimiento muy grandes o interactivos, el formato JSON puede convertirse en un trade-off en lugar de una ventaja. Ese trade-off se vuelve más importante una vez que alcanzas la producción, lo que es donde la mayoría de las tutoriales se detienen demasiado pronto.

Configuración de su entorno de desarrollo de Lottie

El camino de instalación depende de una decisión primero: Flujo de trabajo administrado por Expo o React Native desnudoNo mezcles los modelos mentales. La mayoría de los problemas de configuración ocurren cuando los desarrolladores siguen una guía de flujo de trabajo desnudo dentro de Expo, o asumen que Expo abstracta todos los detalles nativos.

Un diagrama de flujo que muestra los pasos de configuración para animaciones de Lottie en proyectos de Expo y React Native desnudo.

Elige el flujo de trabajo antes de instalar

Si tu aplicación vive en Expo y quieres la configuración más rápida, mantente en el camino de Expo a menos que sepas que necesitas trabajo nativo personalizado. Si estás en una aplicación desnuda, o ya dependes de módulos nativos que necesitan control directo, instálalo como una dependencia nativa normal y valida tanto los builds de iOS como Android de inmediato.

Muchas veces, los equipos subestiman cuánto más fácil se vuelve la depuración cuando se mantiene la configuración alineada con el tipo de proyecto. Eso es también por qué muchos equipos que construyen integraciones nativas personalizadas se mueven temprano a un flujo de trabajo del cliente de desarrollo de Expo en lugar de esperar hasta que la aplicación se vuelva más difícil de cambiar.

Configuración administrada de Expo

Para aplicaciones administradas por Expo, manténlo minimalista.

  1. Instale el paquete

    npx expo install lottie-react-native
  2. Reinicie Metro

    npx expo start -c
  3. Verifique en dispositivo o simulador Comience con un archivo JSON local y renderice una animación muy pequeña primero. No debugee un activo grande y una instalación nueva al mismo tiempo.

Unos pocos notas prácticas importan en Expo:

  • Preferir archivos locales primero: La depuración de animaciones remotas agrega ruido de red cuando solo intenta probar la biblioteca.
  • Pruebe el comportamiento de lanzamiento temprano: El modo de desarrollo puede ocultar problemas relacionados con el tiempo y el rendimiento.
  • Mire las rutas de activos: Los archivos JSON mal ubicados son una de las causas más comunes de “no se renderiza nada”.

Expo es la ruta más rápida a “funciona”. Eso no significa que sea la ruta más rápida a “se escalona”.

Configuración de React Native básica

En un proyecto básico, instale y valide las dependencias nativas de inmediato.

  1. Instalar el paquete

    npm install lottie-react-native
  2. Instalar pods de iOS

    cd ios && pod install && cd ..
  3. Reconstruir la aplicación

    npx react-native run-ios

    o

    npx react-native run-android

Aquí está la parte que muchos guías de inicio rápido omiten: después de la instalación, realice una reconstrucción nativa completa antes de decidir que algo está roto. La recarga caliente no rescatará una dependencia nativa que no se ha compilado correctamente en la aplicación.

Verificación del flujo de trabajo básico que ahorra tiempo

Use este breve checklist antes de seguir adelante:

Verifique Por qué importa
Reconstruir después de la instalación Los módulos nativos necesitan una compilación fresca
Ejecutar pod install iOS no será confiable sin él
Utilice un archivo JSON local simple primero Isola los problemas de instalación de los problemas de activos
Pruebe ambos sistemas operativos temprano Android e iOS pueden fallar por razones diferentes

Si el paquete se instala limpiamente pero tu primera animación no se muestra, eso suele no ser un problema de instalación. Suele ser la ruta del activo, el tamaño del componente o la configuración de reproducción.

Mostrar tu primera animación Lottie

La primera animación que funcione debería ser aburrida. Archivo local. Tamaño fijo. Reproducción automática. Repetición opcional. No comience con reproducción condicional, JSON remoto o una animación exportada con capas muy superpuestas.

Un entorno de desarrollo moderno con una laptop que muestra code y un monitor que muestra una aplicación de animación móvil.

Agregar un archivo de animación local

Crear una carpeta de activos si no la tienes ya:

assets/
  animations/
    success.json

Mantén los nombres simples. Evita espacios, puntuación extraña y carpetas con muchos niveles de anidamiento. Quieres require() que los caminos sean obvios.

Si estás utilizando Lottie para una pantalla de carga inicial con marca o una transición después del lanzamiento, piensa con cuidado antes de poner una gran animación en el camino de arranque. Eso es especialmente cierto cuando también estás ajustando el comportamiento de la pantalla de arranque de React Native Renderizarlo con LottieView.

Crear un componente dedicado en lugar de agregarlo directamente a un archivo de pantalla grande:

Eso hace tres cosas útiles:

import React from 'react';
import { View, StyleSheet } from 'react-native';
import LottieView from 'lottie-react-native';

export function SuccessAnimation() {
  return (
    <View style={styles.container}>
      <LottieView
        source={require('../assets/animations/success.json')}
        autoPlay
        loop={false}
        style={styles.animation}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    alignItems: 'center',
    justifyContent: 'center',
  },
  animation: {
    width: 220,
    height: 220,
  },
});

prueba que la biblioteca se renderiza correctamente

  • prueba que la ruta de activos se resuelve correctamente
  • Eso demuestra que la biblioteca se renderiza correctamente y que la ruta de activos se resuelve correctamente
  • te da un lugar aislado donde ajustar la reproducción y el tamaño más tarde

Unos pocos inconvenientes aparecen de inmediato si omites los fundamentos:

  • Sin ancho ni alto: La animación puede existir pero ser invisible.
  • Mal require() ruta: Metro no encontrará el archivo.
  • Exportación inválida: Algunos archivos JSON son técnicamente válidos pero incluyen características que no se comportan como se espera en móviles.

Mantén la primera renderización local y determinista. Estás probando la integración, no la arquitectura.

Un mejor primer test de pantalla

Coloca el componente en una pantalla simple con un fondo neutral:

import React from 'react';
import { SafeAreaView, StyleSheet } from 'react-native';
import { SuccessAnimation } from './src/SuccessAnimation';

export default function App() {
  return (
    <SafeAreaView style={styles.screen}>
      <SuccessAnimation />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  screen: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#fff',
  },
});

Si esto funciona en ambos simuladores de iOS y Android, has superado la primera verdadera barrera. Desde allí, el siguiente paso no es agregar más animaciones. Es aprender cuándo usar propiedades declarativas y cuándo tomar el control directo con refs.

Dominar Controles de Animación Lottie

La mayoría de los errores de Lottie React Native se presentan cuando la animación necesita reaccionar al estado. El autoplay es fácil. 'Reproduce este segmento cuando el usuario le gusta un artículo, inviértelo cuando no le guste, y no se detenga cuando el componente se vuelva a renderizar' es donde las cosas se ponen complicadas.

Una tabla de comparación que explica los métodos de control de animación declarativa e imperativa en Lottie, destacando sus casos de uso específicos.

Usa propiedades cuando la reproducción es simple

Para la reproducción no interactiva, las propiedades son suficientes.

<LottieView
  source={require('../assets/animations/loading.json')}
  autoPlay
  loop
  speed={1}
/>

Este estilo es bueno para:

  • indicadores de carga
  • ilustraciones de onboarding pasivo
  • estados vacíos decorativos

Es declarativo y legible. El componente se monta, la reproducción comienza y React mantiene el control. Si la lógica de la animación se puede describir completamente con propiedades, manténlo allí.

Un caso declarativo más avanzado es __CAPGO_KEEP_0__ progressdonde se vincula el marco de animación a otro valor. Funciona bien cuando el movimiento debe reflejar una fuente de progreso externa, pero es menos conveniente para eventos de disparo uno a uno.

Aquí hay una comparación visual rápida antes de pasar a los refs:

Usar refs cuando el estado impulsa la animación

Cuando el usuario hace clic, activa o completa una acción, un ref es normalmente la herramienta más segura. Los datos reales muestran 68% de los desarrolladores que utilizan marcos híbridos informan disparadores de animación fallidos debido a un manejo inadecuado de refs en useEffect hooksque es por qué los patrones confiables construidos alrededor animation.current.play() importan, como se nota en este Capacitor-centrado debate sobre disparadores fallidos.

Este problema no se limita a aplicaciones híbridas. También aparece en React Native puro, especialmente cuando los desarrolladores recrean refs, reproducen la reproducción antes de la montaje o vinculan llamadas de animación a efectos inestables.

import React, { useRef, useState } from 'react';
import { Pressable } from 'react-native';
import LottieView from 'lottie-react-native';

export function LikeButton() {
  const animationRef = useRef<LottieView>(null);
  const [liked, setLiked] = useState(false);

  const onPress = () => {
    if (!animationRef.current) return;

    if (liked) {
      animationRef.current.play(60, 0);
    } else {
      animationRef.current.play(0, 60);
    }

    setLiked(!liked);
  };

  return (
    <Pressable onPress={onPress}>
      <LottieView
        ref={animationRef}
        source={require('../assets/animations/like.json')}
        loop={false}
        autoPlay={false}
        style={{ width: 96, height: 96 }}
      />
    </Pressable>
  );
}

Un patrón de me gusta y no me gusta

Este patrón se sostiene mejor en producción que llamar play() dentro useEffect cada vez que cambia el estado.

¿Por qué funciona:

  • El evento posee el disparador de animación: Un evento de presión es un momento estable para iniciar la reproducción.
  • El ref permanece local y persistente: useRef evita re-rendereos innecesarios.
  • El componente evita conflictos de autoplay: No quieres que el comportamiento de montaje luche con el comportamiento desencadenado por el usuario.

Errores comunes que vale la pena evitar:

  1. Desencadenar antes de que exista el ref
    Si animationRef.current es nulo, no habrá reproducción. Cuidado con él.

  2. Usando autoPlay con controles imperativos
    Elige un dueño por defecto para la reproducción.

  3. Todo se mueve a través de useEffect
    Los efectos son útiles, pero para acciones de interfaz de usuario a menudo agregan problemas de tiempo en lugar de eliminarlos.

Si una animación responde a un toque, activa primero dentro del manejador de toque. Busca useEffect solamente cuando la fuente de verdad vive fuera de esa interacción.

Tuneo de rendimiento para aplicaciones de producción

Lottie React Native es una de esas bibliotecas que parece ligera hasta que los equipos comienzan a meter grandes archivos JSON en el paquete de la aplicación y se preguntan por qué la inicialización de arranque se ha retrasado. La animación en sí no siempre es el problema. La estrategia de entrega es.

Un infográfico que detalla tres beneficios clave del ajuste de rendimiento de Lottie: tamaño de paquete reducido, tasas de frames mejoradas y uso de memoria reducido.

Donde los equipos se meten en problemas

El error más fácil es empaquetar cada animación directamente en JavaScript y cargar todo demasiado pronto. Segúnesta guía sobre el envío de Lottie JSON de manera incorrecta sobrecargar paquetes de JS con activos como Lottie JSONs puede aumentar los tiempos de inicio de la aplicación en un 40% o más en dispositivos de gama mediay moverlos a activos nativos para cargarlos a demanda es una optimización crítica.

Eso se alinea con lo que muchas equipos ven en la práctica.

  • El problema no es una sola animación de éxito diminuta.
  • Es la acumulación:
  • moverse por la pantalla de bienvenida
  • estados de cargador
  • reacciones de comercio electrónico

pantallas vacías con marca registrada y otros activos pesados de paquetes que se sientan junto a ellos

¿Qué optimizar primero

Comience con la exportación en sí misma. Una exportación de animación desordenada conlleva complejidad que pagará más tarde en la interpretación, memoria y estabilidad de renderizado. No acepte cada exportación de diseñador tal como viene.

Utilice este checklist de producción:

  • Comprimir el JSON antes de enviar: Los archivos más pequeños son más fáciles de cargar y menos propensos a hinchar el arranque.
  • Mueva las animaciones no críticas fuera de la paquetería de JS: Mantenga el lanzamiento code enfocado en lo que la aplicación necesita de inmediato.
  • Cargue animaciones a demanda: Renderice cuando la pantalla o la acción lo necesite.
  • Audite el comportamiento de los dispositivos antiguos: Un simulador moderno puede ocultar la reproducción cara.
  • Evite utilizar archivos Lottie grandes como decoración de arranque: If no es crítico para la primera interacción, no debería competir con el lanzamiento de la aplicación.

Para equipos que realizan un trabajo serio de rendimiento móvil, La guía de AppLighter sobre rendimiento móvil es una lectura útil de compañero porque coloca las decisiones de animación en el contexto más amplio del arranque de la aplicación, la renderización y las compensaciones de marcos.

Una verdad dura: Una hermosa animación que retrasa la primera interacción es generalmente un error de producto, no un beneficio de diseño.

También debes pensar más allá de React Native en aislamiento. Los equipos que trabajan en pilas híbridas se enfrentan a problemas similares de carga de activos, y la guía de rendimiento de animación para aplicaciones __CAPGO_KEEP_0__ se ajusta bien a las decisiones de Lottie también. animation performance guidance for Capacitor apps Los archivos locales son predecibles. Funcionan sin conexión, eliminan la variabilidad de red y son más fáciles de probar. También son fáciles de sobrecargar.

La entrega remota mantiene el binario más ligero, pero ahora tu animación tiene preocupaciones de disponibilidad, caché y respaldo. Ese equilibrio es aceptable para la no-UX crítica como la confirmación de compra o el éxito de la autenticación.

Para equipos que realizan un trabajo serio de rendimiento móvil

La guía de AppLighter sobre rendimiento móvil es una lectura útil de compañero porque coloca las decisiones de animación en el contexto más amplio del arranque de la aplicación, la renderización y las compensaciones de marcos. Una verdad dura: una hermosa animación que retrasa la primera interacción es generalmente un error de producto, no un beneficio de diseño. También debes pensar más allá de React Native en aislamiento. Los equipos que trabajan en pilas híbridas se enfrentan a problemas similares de carga de activos, y la guía de rendimiento de animación para aplicaciones __CAPGO_KEEP_0__ se ajusta bien a las decisiones de Lottie también. Los archivos locales son predecibles. Funcionan sin conexión, eliminan la variabilidad de red y son más fáciles de probar. También son fáciles de sobrecargar. La entrega remota mantiene el binario más ligero, pero ahora tu animación tiene preocupaciones de disponibilidad, caché y respaldo. Ese equilibrio es aceptable para la no-UX crítica como la confirmación de compra o el éxito de la autenticación.

Una división práctica funciona bien:

Tipo de activo Mejor por defecto
Animación de interacción de núcleo Local, optimizado, no sobredimensionado
Movimiento promocional ocasional Remoto con fallback
Animación del camino de arranque Solo local si es absolutamente necesario
Ilustración de característica poco utilizada Carga a demanda

Si solo aplicas una regla de esta sección, utiliza esta: traten Lottie JSONs como activos de rendimiento sensible, no como decoración inocente.

Resolución de Problemas Comunes de Lottie

Cuando Lottie falla, la causa suele ser ordinaria. Ruta incorrecta. Tamaño faltante. Tiempo de referencia incorrecto. JSON pesado. La forma más rápida de depurar es reducir variables.

La animación no se renderiza en Android

Primero, confirme que el archivo JSON se resuelve. Luego, dé al componente dimensiones explícitas.

<LottieView
  source={require('../assets/animations/success.json')}
  autoPlay
  style={{ width: 200, height: 200 }}
/>

Si eso sigue fallando, intercambie una animación diferente conocida y buena. Eso le dice si el problema es el archivo o la configuración.

La reproducción es borrosa en dispositivos más antiguos

Esto suele apuntar al activo, no al componente API.

Intente estos ajustes:

  • Reducir la complejidad de la animación: Pida una exportación más ligera si el archivo de origen es pesado.
  • Cargar más tarde: No competir con el trabajo de la pantalla inicial.
  • Prueba una versión comprimida: Si el archivo comprimido se comporta mejor, has encontrado la botella de cuello.
  • Elimina varias vistas de Lottie simultáneas: Varias animaciones en una pantalla pueden ser demasiado.

La referencia es nula o no hace nada

Las referencias nulas suelen significar que el disparador dispara antes de la montura, o el componente se eliminó condicionalmente.

if (animationRef.current) {
  animationRef.current.play();
}

Mantén la referencia estable con useRef y no recrees el componente animado innecesariamente. Si estás depurando repetidas extrañezas en compilaciones locales, eliminar cachés obsoletos puede ayudar. Una rutina de limpieza de caché de Yarn a veces es suficiente para eliminar el comportamiento de activos engañosos durante el desarrollo. La animación se ve mal en diferentes tamaños de pantalla

La rutina de limpieza de caché de Yarn a veces es suficiente para eliminar el comportamiento de activos engañosos durante el desarrollo.

No dejes que la animación defina el diseño. Colócala dentro de un contenedor y tamañoa intencionalmente.

  • Utiliza límites fijos para iconos y reacciones
  • Utiliza contenedores conscientes de aspecto para ilustraciones más grandes
  • Evita estirar a ancho completo sin verificar la composición exportada

La mayoría de los informes de 'Lottie está roto' terminan siendo problemas de diseño, problemas de activos o problemas de tiempo. La biblioteca está haciendo exactamente lo que le pediste.

Si necesitas un atajo de depuración final, elimina todos los propiedades avanzadas, renderiza una animación local en una vista centrada y reconstruye desde allí. Ese enfoque aísla problemas más rápido que mirar una pantalla de producción ocupada.


Capgo ayuda a los equipos a enviar correcciones de JavaScript, activos y configuración a Capacitor sin tener que esperar la revisión de la tienda. Si mantienes una aplicación híbrida y necesitas una forma más segura de enviar actualizaciones, manejar despliegues en etapas y recuperarte rápidamente de problemas de front-end, Capgo es digno de una mirada.

Actualizaciones en vivo para aplicaciones Capacitor

Cuando un error en la capa web está activo, envíe la corrección a través de Capgo en lugar de esperar días para la aprobación de la tienda de aplicaciones. Los usuarios obtienen la actualización en segundo plano mientras los cambios nativos siguen en el camino de revisión normal.

Comience ahora

Últimas noticias de nuestro Blog

Capgo le da las mejores pistas que necesita para crear una aplicación móvil verdaderamente profesional.