Allez directement au contenu principal
Mobile Guides

Lottie React Native

Notre guide complet vous enseigne à utiliser lottie react native. Il couvre les workflows Expo et bare, les contrôles d'animation, l'optimisation de performances et les meilleures pratiques pour 2026.

Lottie React Native

Vous êtes probablement dans l'un de deux endroits en ce moment. Soit vous avez un designer qui vous donne un Lottie JSON et qui vous demande, « Pouvez-vous obtenir cela dans l'application aujourd'hui ? », ou vous avez déjà câblé et avez remarqué que l'animation fonctionne en développement mais commence à ressembler à un coût une fois que les appareils réels, le temps de démarrage et les builds de mise en production entrent en scène.

That’s where Lottie React Native gets interesting. The basic demo is easy. Production-ready implementation isn’t. The difference usually comes down to how you install it, how you control playback, and whether you treat animation files like harmless assets or like part of your performance budget.

Table des matières

Pourquoi Lottie est essentiel pour les applications React Native.

Si vous avez déjà essayé de recréer une animation de produit polie manuellement dans React Native, vous connaissez déjà la douleur. Les détails de mouvement mineurs se transforment en un tas de logique de timing, d'interpolations et de particularités de plateforme. L'animation peut ressembler à celle que le designer a expédiée, mais « proche » n'est généralement pas ce que le designer a expédié.

Lottie a changé ce flux de travail. Airbnb a publié Lottie sous licence libre en 2016, et cette publication a changé l'animation mobile en permettant aux designers d'expédier des animations directement au lieu de forcer les ingénieurs à les reconstruire ligne par ligne. Dans certains environnements d'entreprise, ce changement a réduit les coûts de développement d'applications mobiles de jusqu'à 40 %. jusqu'à 40%La conception et l'ingénierie cessent de lutter pour la même bataille. Résumé d'Airbnb Lottie.

Conception et ingénierie, arrêtez de lutter contre le même adversaire

A key benefit of Lottie React Native isn’t just “pretty animations in JSON.” It’s the separation of concerns. Designers work in After Effects and export with Bodymovin. Developers render the output with native-backed playback instead of translating motion into custom code.

Parce que le travail d'animation a tendance à se propager. Une seule animation de l'état célébratoire peut toucher la revue de conception, la revue du produit, le comportement Android, le comportement iOS, l'accessibilité et les performances au démarrage. Lottie réduit cette surface d'attaque.

Règle pratique : Utilisez Lottie lorsque l'animation fait partie de l'expérience produit, et non lorsque vous avez besoin d'une simple opacité ou d'une transition de traduction.

Existe également un angle d'expérience utilisateur. La motion donne des retours d'information, confirme les actions et rend les états de chargement moins morts. Si votre équipe réfléchit sérieusement à la finesse, la rétention ou la confiance dans l'interface, l'animation fait partie de cette conversation. La discussion plus large discute généralement de l'expérience utilisateur de l'application se termine souvent par la même chose : un feedback rapide bat les écrans statiques.

Où Lottie s'intègre le mieux

Lottie React Native fonctionne généralement le mieux pour :

  • Les micro-interactions personnalisées comme likes, enregistrements, signets, et états de réussite d'achat
  • Les illustrations de l'expérience utilisateur qui doivent ressembler à du contenu personnalisé sans envoyer de vidéo
  • États de chargement et vides où les interfaces utilisateur statiques semblent inachevées
  • Éducation des fonctionnalités lorsque le produit souhaite de la motion sans intégrer des GIFs ou des MP4s

Ce qu'il ne résout pas, c'est tous les problèmes d'animation. Pour les transitions d'écran de base, les outils d'animation de React Native sont souvent plus simples. Pour les systèmes de motion très importants ou interactifs, le format JSON peut devenir un compromis au lieu d'une victoire. Ce compromis devient plus important une fois que vous atteignez la production, ce qui est là où la plupart des tutoriels s'arrêtent trop tôt.

Configuration de votre environnement de développement Lottie

La voie d'installation dépend d'une décision préalable : Flux de travail Expo géré ou React Native bareNe mêlez pas les modèles mentaux. La plupart des problèmes de configuration se produisent lorsque les développeurs suivent une guide de flux de travail bare dans Expo, ou supposent que Expo abstrait tous les détails natifs.

Un diagramme de flux montrant les étapes de configuration pour les animations Lottie dans les projets Expo et React Native bare.

Choisissez le flux de travail avant d'installer

Si votre application vit dans Expo et que vous souhaitez la configuration la plus rapide, restez sur la voie d'Expo à moins que vous ne sachiez que vous avez besoin de travaux natifs personnalisés. Si vous êtes dans une application bare, ou que vous dépendez déjà de modules natifs qui nécessitent un contrôle direct, installez-le comme une dépendance native normale et validez les builds iOS et Android immédiatement.

A lot of teams underestimate how much easier debugging becomes when you keep your setup aligned with the project type. That’s also why many teams building custom native integrations move early to an Flux de développement du client Expo au lieu d'attendre que l'application devienne difficile à modifier.

Configuration Expo gérée

Pour les applications gérées par Expo, gardez-le minimal.

  1. Redémarrez Metro

    npx expo install lottie-react-native
  2. Vérifiez sur appareil ou simulateur

    npx expo start -c
  3. Vérifiez sur appareil ou simulateur Start with a local JSON file and render a very small animation first. Don’t debug a large asset and a new install at the same time.

Préférez les fichiers locaux en premier :

  • Préférez les fichiers locaux en premier. La débogage d'animation à distance ajoute du bruit de réseau lorsque vous essayez uniquement de prouver que la bibliothèque fonctionne.
  • Testez le comportement de la version de test : Le mode de développement peut cacher les problèmes liés à la temporisation et à la performance.
  • Observez les chemins des assets : Les fichiers JSON mal placés sont l'une des causes les plus courantes de « rien ne s'affiche ».

Expo est la voie la plus rapide vers « ça marche ». Ce n'est pas dire que c'est la voie la plus rapide vers « ça s'adapte ».

Configuration de base de React Native

Dans un projet de base, installez et validez les dépendances natives dès le départ.

  1. Installez le package :

    npm install lottie-react-native
  2. Installez les pods iOS :

    cd ios && pod install && cd ..
  3. Rebâtissez l'application :

    npx react-native run-ios

    ou

    npx react-native run-android

Here’s the part many quick-start guides skip: after installation, do a full native rebuild before deciding something is broken. Hot reload won’t rescue a native dependency that hasn’t been compiled into the app correctly.

Flux de base qui économise du temps

Utilisez ce petit checklist avant de passer à l'étape suivante.

Vérifiez Pourquoi cela compte
Reconstruire après l'installation Native modules need a fresh compile
Démarrez pod install L'iOS ne sera pas fiable sans cela
L'iOS ne sera pas fiable sans cela Utilisez un JSON local simple en premier
Isolé les problèmes d'installation des problèmes d'actif Android and iOS can fail for different reasons

Si le package s'installe proprement mais que votre première animation ne s'affiche pas, ce n'est généralement pas un problème d'installation. C'est généralement la voie d'accès aux ressources, la taille du composant ou la configuration de lecture.

Afficher votre première animation Lottie

La première animation fonctionnelle devrait être ennuyeuse. Fichier local. Taille fixe. Lecture automatique. Boucle facultative. N'oubliez pas de commencer par une animation simple, sans condition, sans fichier JSON distant ou une exportation d'animation complexe.

Un espace de travail moderne pour les développeurs avec un ordinateur portable affichant code et un moniteur montrant une application d'animation mobile.

Ajoutez un fichier d'animation local

Créez un dossier de ressources si vous n'en avez pas déjà un :

assets/
  animations/
    success.json

Gardez les noms simples. Évitez les espaces, les ponctuations inhabituelles et les dossiers avec de nombreux niveaux de hiérarchie. require() chemins pour rester évidents.

If you’re using Lottie for an initial branded loading screen or handoff after launch, think carefully before putting a large animation into the startup path. That’s especially true when you’re also tuning your Comportement de l'écran de démarrage de React Native.

Rendre avec LottieView

Créez un composant dédié plutôt que de le mettre directement dans un grand fichier de l'écran :

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,
  },
});

Cela réalise trois choses utiles :

  • ceci prouve que la bibliothèque s'affiche correctement
  • ceci prouve que la voie de l'asset se résout correctement
  • ceci vous donne un endroit isolé où ajuster la lecture et la taille ultérieurement

Un certain nombre de pièges apparaissent immédiatement si vous passez les bases :

  • Pas de largeur ou de hauteur : L'animation peut exister mais être invisible.
  • Mauvais require() chemin : Metro ne trouvera pas le fichier.
  • Export non valide : Certains fichiers JSON sont techniquement valides mais incluent des fonctionnalités qui ne se comportent pas comme prévu sur les appareils mobiles.

Conservez la première rendu local et déterministe. Vous testez l'intégration, pas l'architecture.

Un meilleur test de première écran

Placez le composant sur une écran simple avec un fond neutre :

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 cela fonctionne dans les simulateurs iOS et Android, vous avez franchi la première vraie étape. Dès là, le prochain pas n'est pas d'ajouter plus d'animations. C'est de comprendre quand utiliser des propriétés déclaratives et quand prendre le contrôle direct avec des références.

Maîtriser les contrôles d'animation Lottie

La plupart des bogues Lottie React Native apparaissent lorsque l'animation doit réagir à l'état. L'autoréglage est facile. « Jouez ce segment lorsque l'utilisateur aime un article, inversez-le lorsque l'utilisateur le déteste, et ne faites pas de saut lorsque le composant se re-rend » est là où les choses deviennent compliquées.

Une comparaison des méthodes de contrôle d'animation déclarative et impérative dans Lottie, mettant en avant leurs cas d'utilisation spécifiques.

Utilisez les props lorsque la lecture est simple

Pour une lecture non interactive, les propriétés suffisent.

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

Cette méthode est bonne pour :

  • indicateurs de chargement
  • illustrations d'incorporation passive
  • États vides décoratifs

Ce modèl’est déclaratif et lisible. Le composant s'active, la lecture commence, et React reste en charge. Si la logique de l'animation peut être décrite entièrement par des propriétés, gardez-le là.

Un cas déclaratif plus avancé est progressoù vous liez le cadre d'animation à une autre valeur. Cela fonctionne bien lorsque le mouvement doit refléter une source de progression externe, mais c'est moins pratique pour les événements de déclenchement uniques.

Voici une comparaison visuelle rapide avant de passer aux références :

Utilisez des références lorsque l'état anime l'animation

Lorsque l'utilisateur appuie, bascule ou termine une action, une référence est généralement l'outil plus sûr. Les données réelles montrent 68% des développeurs utilisant des frameworks hybrides signalent des déclencheurs d'animation échoués en raison d'une gestion de références improprie en useEffect hooksqui est pourquoi des modèles fiables construits autour animation.current.play() importent, comme le noté dans ce Capacitor-focalisé discussion des déclencheurs échoués.

Ce problème n'est pas limité aux applications hybrides. Il apparaît également dans React Native pur, surtout lorsque les développeurs recréent des références, déclenchent la lecture avant le montage, ou lient les appels d'animation aux effets instables.

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 modèle fiable de liké et de disliké

Ce modèle tient mieux la route en production que d'appeler play() à l'intérieur useEffect chaque fois que les états changent.

Pourquoi cela fonctionne :

  • L'événement possède le déclencheur d'animation : Un événement de pression est un moment stable pour démarrer la lecture.
  • La référence reste locale et persistante : useRef évite les redéfinissements inutiles.
  • Le composant évite les conflits d'autoréinitialisation : You don’t want mount behavior fighting user-triggered behavior.

Évitez ces erreurs courantes :

  1. Déclenchez avant que l'élément de référence n'existe
    Si animationRef.current est null, la lecture ne se produira pas. Protégez-le.

  2. Utilisez autoPlay avec des contrôles impératifs
    Choisissez un propriétaire par défaut pour la lecture.

  3. Contrôlez tout à partir de useEffect
    Les effets sont utiles, mais pour les actions UI, ils ajoutent souvent des problèmes de timing au lieu de les supprimer.

Si une animation répond à un clic, déclenchez-l’à l'intérieur du gestionnaire de clic en premier lieu. Ressourcez à useEffect seulement lorsque la source de vérité vit en dehors de cette interaction.

Tuning de performance pour les applications de production

Lottie React Native est l'un de ces bibliothèques qui semble légère jusqu'à ce que les équipes commencent à insérer de grands fichiers JSON dans le bundle de l'application et se demandent pourquoi le démarrage a régressé. La mise en œuvre de l'animation n'est pas toujours le problème. La stratégie de livraison est.

Une infographique détaillant trois avantages clés de l'optimisation de la performance Lottie : une taille de paquet réduite, des taux de rafraîchissement améliorés et une consommation de mémoire réduite.

Où les équipes se retrouvent en difficulté

L'erreur la plus facile est de packager chaque animation directement dans JavaScript et de les charger toutes trop tôt. Selon ce guide sur l'envoi de JSON Lottie incorrectementL'overload des bundles JS avec des assets comme les fichiers Lottie JSON peut augmenter les temps de démarrage de l'application. 40% ou plus sur les appareils de gamme moyenne, et les déplacer vers les actifs natifs pour un chargement sur demande constitue une optimisation critique.

Cela correspond à ce que de nombreuses équipes voient en pratique. Le problème n'est pas une animation de succès minuscule. C'est la pile-up :

  • la motion d'accueil
  • les états de chargeur
  • les réactions du commerce électronique
  • Écrans vides personnalisés
  • Fichiers de localisation et autres actifs volumineux du bundle qui leur sont adjacents

Si votre application a déjà un problème de budget de démarrage, les fichiers Lottie peuvent le rendre pire rapidement.

Qu'est-ce à optimiser en premier

Commencez par l'exportation elle-même. Un export d'animation mal fait apporte de la complexité que vous paierez plus tard en termes de parsing, de mémoire et de stabilité de rendu. N'acceptez pas chaque export de designer tel quel.

Utilisez ce checklist de production :

  • Comprimez le JSON avant de l'expédier : Fichiers plus petits sont plus faciles à charger et moins susceptibles de gonfler le démarrage.
  • Déplacez les animations non critiques hors du bundle JS : Keep launch code focused on what the app needs immediately.
  • Chargez les animations à la demande : Rendez-les lorsque la page ou l'action les nécessite.
  • Analyser le comportement des anciens appareils : Un simulateur moderne peut cacher la lecture coûteuse.
  • Évitez d'utiliser des fichiers Lottie volumineux comme décor de démarrage : Si ce n'est pas essentiel à la première interaction, il ne doit pas gêner le lancement de l'application.

Pour les équipes effectuant des travaux de performance mobile sérieux, La guide d'AppLighter sur la performance mobile C'est un article utile à lire car il met les décisions d'animation en perspective avec le démarrage, le rendu et les compromis de la plateforme.

Une vérité dure : Une belle animation qui retarderait la première interaction est généralement un bug de produit, pas un gain de conception.

Pensez également au-delà de React Native en isolement. Les équipes travaillant sur des stacks hybrides rencontrent des problèmes similaires de chargement d'actifs, et le contexte plus large guidance de performance d'animation pour les applications Capacitor correspond bien aux décisions de Lottie également.

Fichiers locaux versus livraison à distance

Fichiers locaux sont prévisibles. Ils fonctionnent hors ligne, suppriment la variabilité du réseau et sont plus faciles à tester. Ils sont également faciles à sur-emballer.

Remote delivery keeps the binary leaner, but now your animation has availability, caching, and fallback concerns. That trade-off is acceptable for non-critical motion. It’s risky for primary UX states like purchase confirmation or authentication success.

Une séparation pratique fonctionne bien :

Type d'actif Type d'actif
Animation d'interaction de base Animation d'interaction de base
Fichier local, optimisé, pas trop volumineux Mouvement publicitaire occasionnel
Livraison distante avec redondance Seulement si absolument nécessaire
Illustration de fonctionnalité peu utilisée Chargement sur demande

Si vous n'appliquez qu'une seule règle de cette section, utilisez celle-ci : Traitez les Lottie JSON comme des actifs performants, et non comme de la décoration inoffensive.

Résolution de problèmes courants de Lottie

Lorsque Lottie ne fonctionne pas, la cause est généralement ordinaire. Chemin incorrect. Taille manquante. Temps de référence incorrect. JSON trop lourd. La façon la plus rapide de le déboguer est de réduire les variables.

Animation ne s'affiche pas sur Android

Tout d'abord, confirmez que le fichier JSON est résolu. Ensuite, donnez au composant des dimensions explicites.

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

Si cela ne fonctionne toujours pas, remplacez par une animation connue et prouvée. Cela vous indique si le problème est le fichier ou la configuration.

La lecture est floue sur les appareils plus anciens.

Cela pointe généralement vers l'actif, et non vers le composant API.

Essayez ces corrections :

  • Réduire la complexité d'animation : Demander une exportation plus légère si le fichier source est lourd.
  • Charge plus tard : Don’t compete with initial screen work.
  • Testez une version compressée : Si le fichier compressé se comporte mieux, vous avez trouvé la cause principale.
  • Supprimer plusieurs vues Lottie simultanées : Plusieurs animations sur une seule écran peuvent être trop nombreuses.

La référence est nulle ou jouer ne fait rien.

Les null refs indiquent généralement que le déclencheur se déclenche avant la montée, ou que le composant a été supprimé conditionnellement.

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

Maintenez la référence stable avec useRefÉvitez de recréer inutilement le composant animé. Si vous rencontrez des problèmes répétitifs lors des builds locaux, le nettoyage des caches obsolètes peut être utile. routine de nettoyage de la cache Yarn est parfois suffisant pour supprimer le comportement des actifs trompeurs pendant le développement.

l'animation semble incorrecte sur les différentes tailles d'écran

N'obligerez pas l'animation à définir la disposition. Mettez-l’à l'intérieur d'un conteneur et taillez-l’intentionnellement.

  • Utilisez des limites fixes pour les icônes et les réactions
  • Use aspect-aware wrappers for larger illustrations
  • Évitez de s'étirer jusqu'à la largeur maximale sans vérifier la composition d'exportation prévue

La plupart des rapports « Lottie est cassé » se terminent par des problèmes de disposition, des problèmes d'actifs ou des problèmes de timing. La bibliothèque fait souvent exactement ce que vous avez demandé.

Si vous avez besoin d'un raccourci de débogage final, supprimez tous les props avancés, affichez une animation locale dans une vue centrée et construisez à partir de là.


Capgo helps teams ship JavaScript, asset, and config fixes to Capacitor apps without waiting on store review. If you maintain a hybrid app and need a safer way to push updates, handle staged rollouts, and recover quickly from front-end issues, Capgo __CAPGO_KEEP_0__ est une solution à considérer.

Mises à jour instantanées pour les applications Capacitor

Quand un bug de couche web est en direct, expédiez la correction par Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs obtiennent la mise à jour en arrière-plan tandis que les modifications natives restent dans le chemin de revue normal.

Un soutien humain de Martin

Démarrer maintenant

Dernières actualités de notre blog

Capgo vous offre les meilleures informations nécessaires pour créer une application mobile véritablement professionnelle.