Passer au contenu principal
Mobile Guides

Lottie React Native

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

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

Lottie React Native

Vous êtes probablement dans l'un des deux endroits en ce moment. Soit vous avez un designer qui vous remet un Lottie JSON et vous demande : « Pouvez-vous l'intégrer dans l'application aujourd'hui ? », ou vous avez déjà câblé et remarqué que l'animation fonctionne en développement mais commence à ressembler à un coût élevé une fois que les appareils réels, le temps d'amorçage et les builds de mise en production entrent en jeu.

C'est là que Lottie React Native devient intéressant. La démo de base est facile. La mise en œuvre prête à la production n'est pas.

La différence vient généralement de la façon dont vous l'installez, de la façon dont vous contrôlez la lecture, et de savoir si vous traitez les fichiers d'animation comme des actifs sans danger ou comme partie de votre budget de performance.

Pourquoi Lottie est essentiel pour les applications React Native

Si vous avez déjà essayé de recréer une animation de produit polie par la main 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 du designer, 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 de livrer des animations directement au lieu de forcer les ingénieurs à les reconstruire cadre par cadre. Dans certains environnements d'entreprise, ce changement a réduit les coûts de développement d'applications mobiles de jusqu'à 40%, selon l'aperçu de Lottie d'Airbnb.

La conception et l'ingénierie cessent de se battre pour la même chose

Un avantage clé de Lottie React Native n'est pas seulement « des animations jolies en JSON ». C'est la séparation des préoccupations. Les designers travaillent dans After Effects et exportent avec Bodymovin. Les développeurs rendent la sortie avec une lecture native au lieu de traduire le mouvement en code.

Cela compte car le travail d'animation a tendance à se propager. Une seule animation d'é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 de démarrage. Lottie réduit cette surface d'application.

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

Il y a aussi 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 pense sérieusement à la rondeur, à la rétention ou à la confiance dans l'interface, l'animation fait partie de la conversation. La discussion plus large sur l'expérience utilisateur de l'application se termine généralement dans le même endroit : un feedback rapide bat les écrans statiques. L'endroit où Lottie s'intègre le mieux

Lottie React Native a tendance à fonctionner le mieux pour :

Des micro-interactions personnalisées

  • comme les likes, les sauvegardes, les coches et les états de réussite d'achat Des illustrations d'inscription
  • qui doivent ressembler à des personnalisations sans envoyer de vidéo Des états de chargement et vides
  • où les UI statiques semblent inachevés L'éducation des fonctionnalités
  • Lottie React Native tends to work best for:__CAPGO_KEEP_0__ When 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 des 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

Le chemin d'installation dépend d'une décision initiale : 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 le chemin 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.

Un grand nombre d'équipes sous-estiment combien la débogage devient plus facile lorsque vous maintenez votre configuration alignée avec le type de projet. C'est aussi pourquoi de nombreuses équipes construisant des intégrations natives personnalisées passent tôt à un Flux de travail de client de développement Expo au lieu de attendre que l'application devienne plus difficile à modifier.

Setup Expo géré

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

  1. Installez le package

    npx expo install lottie-react-native
  2. Redémarrez Metro

    npx expo start -c
  3. Vérifiez sur appareil ou simulateur Commencez par un fichier JSON local et affichez une animation très petite en premier. N'essayez pas de déboguer un grand élément et une nouvelle installation en même temps.

Un quelques notes pratiques sont importantes dans Expo :

  • 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 version préliminaire tôt : Le mode de développement peut cacher les problèmes liés à la synchronisation et à la performance.
  • Surveillez les chemins des éléments Les fichiers JSON mal placés sont l'une des causes les plus courantes de « cela ne rend rien ».

Expo est la voie la plus rapide vers « cela fonctionne ». Cela ne signifie pas qu'il s'agit de la voie la plus rapide vers « cela s'agrandit ».

Configuration de base de React Native

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

  1. Installer le package

    npm install lottie-react-native
  2. Installer les pods iOS

    cd ios && pod install && cd ..
  3. Reconstruire l'application

    npx react-native run-ios

    ou

    npx react-native run-android

Voici la partie que de nombreux guides de démarrage rapide ignorent : après l'installation, effectuez une reconstruction native complète avant de conclure que quelque chose est cassé. La rechargement chaud ne sauvera pas une dépendance native qui n'a pas été compilée correctement dans l'application.

Vérifications de flux de travail de base qui économisent du temps

Utilisez ce court checklist avant de passer à autre chose :

Vérifiez Pourquoi cela compte
Reconstruire après l'installation Les modules natifs nécessitent une compilation fraîche
Exécuter pod install L'iOS ne sera pas fiable sans cela
Utilisez un fichier JSON local simple en premier Isolé les problèmes d'installation des problèmes d'actifs
Testez les deux plateformes dès le début L'Android et l'iOS peuvent échouer pour des raisons différentes

Si le paquet 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 le chemin d'accès aux actifs, la taille des composants ou la configuration de lecture.

Afficher votre première animation Lottie

La première animation fonctionnelle devrait être ennuyeuse. Fichier local. Taille fixe. Lancer automatiquement. Boucle facultative. N'oubliez pas de commencer par une lecture conditionnelle, un fichier JSON distant ou une animation exportée avec plusieurs couches.

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 d'actifs 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érarchisation. Vous voulez require() que les chemins restent évidents.

Si vous utilisez Lottie pour une écran de chargement initial personnalisé ou une transition après le lancement, réfléchissez soigneusement avant d'insérer une grande animation dans le chemin d'initialisation. C'est tout particulièrement vrai lorsque vous ajustez également le comportement de l'écran de démarrage de React Native Affichez-le avec LottieView.

Créez un composant dédié au lieu de le plonger directement dans un grand fichier d'écran :

Cela fait trois choses utiles :

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

ce qui prouve que la bibliothèque fonctionne correctement

  • ce qui prouve que le chemin d'actif se résout correctement
  • paths to stay obvious.
  • Cela vous donne un endroit isolé pour ajuster la lecture et la taille ultérieurement.

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

  • Aucune largeur ou 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 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&#39;ici, le prochain pas n&#39;est pas d&#39;ajouter plus d&#39;animations. C&#39;est apprendre quand utiliser les props déclaratifs et quand prendre le contrôle direct avec les refs.

Maîtriser les Contrôles d&#39;Animation Lottie

La plupart des bogues Lottie React Native apparaissent lorsque l&#39;animation doit réagir à l&#39;état. L&#39;autoplay est facile. « Jouer ce segment lorsque l&#39;utilisateur aime un article, inverser lorsque l&#39;utilisateur le déteste, et ne pas stutter lorsque le composant se re-rend » est là où les choses deviennent compliquées.

Un tableau de comparaison expliquant les méthodes de contrôle d&#39;animation déclarative et impérative dans Lottie, mettant en évidence leurs cas d&#39;utilisation spécifiques.

Utilisez les props lorsque la lecture est simple

Pour la lecture non interactive, les props suffisent.

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

Cette méthode est bonne pour :

  • indicateurs de chargement
  • illustrations d&#39;onboarding passives
  • états vides décoratifs

C&#39;est déclaratif et lisible. Le composant s&#39;affiche, la lecture commence, et React reste en charge. Si la logique d&#39;animation peut être décrite entièrement par les props, gardez-la là.

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

Ici, une comparaison visuelle rapide avant de passer aux refs :

Utilisez les refs lorsque l'état détermine 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 que 68% des développeurs utilisant des frameworks hybrides signalent des déclencheurs d'animation échoués en raison d'une gestion incorrecte des références dans les useEffect hooks, ce qui est pourquoi des modèles fiables construits autour de animation.current.play() sont importants, comme le noté dans ce Capacitor-focalisé discussion des déclencheurs échoués.

Ce problème ne se limite pas 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 de like et dislike fiable

Ce modèle tient mieux la route en production que d'appeler play() à l'intérieur useEffect Chaque fois que l'état change.

Pourquoi ça marche :

  • 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 rafraîchissements inutiles.
  • Le composant évite les conflits d'autorisation automatique : Vous ne voulez pas que le comportement de montage se batte avec le comportement déclenché par l'utilisateur.

Erreurs courantes à éviter :

  1. Déclencher avant l'existence de la référence
    Si animationRef.current est nul, la lecture ne se produira pas. Gardez-le.

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

  3. Tout dirige par useEffect
    Les effets sont utiles, mais pour les actions de l'interface utilisateur, ils ajoutent souvent des problèmes de timing au lieu de les supprimer.

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

Optimisation de performance pour les applications de production

Lottie React Native est l'une 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 la phase de démarrage a régressé. La lecture elle-même n'est pas toujours le problème. La stratégie de livraison est.

Un infographic détaillant trois avantages clés de l'optimisation de performance de Lottie : une taille de bundle réduite, des taux de cadence améliorés et une utilisation de la mémoire réduite.

Où les équipes se retrouvent en difficulté

La plus grande erreur est de bundler chaque animation directement dans JavaScript et de le charger trop tôt. Selon ce guide sur l'envoi incorrect de Lottie JSONcharger des assets comme les Lottie JSONs dans les bundles JS peut augmenter les temps de démarrage de l'application de 40% ou plus sur les appareils de milieu de gammeet 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 petite animation de succès unique.
  • C'est la pile :
  • mouvement d'inscription
  • états de chargeur
  • réactions de commerce électronique

écrans vides personnalisés avec marques

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'envoyer : Les 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 : Gardez le lancement code centré sur ce que l'application a besoin immédiatement.
  • Chargez les animations à la demande : Rendu lorsque l'écran ou l'action le nécessite.
  • Auditez le comportement des anciens appareils : Un simulateur moderne peut cacher un playback coûteux.
  • Évitez d'utiliser des fichiers Lottie importants comme décor de démarrage : Si ce n'est pas essentiel à la première interaction, il ne devrait pas concurrencer le lancement de l'application.

Pour les équipes qui effectuent des travaux de performance mobile sérieux, La guide d'AppLighter sur la performance mobile est un complément utile de lecture car elle met les décisions d'animation dans le contexte plus large du démarrage de l'application, de la mise en page et des compromis de framework.

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.

Vous devriez également penser au-delà de React Native en isolement. Les équipes travaillant dans des stacks hybrides rencontrent des problèmes similaires de chargement d'actifs, et la guidance plus large sur la performance d'animation pour les applications __CAPGO_KEEP_0__ s'applique également aux décisions Lottie. animation performance guidance for Capacitor apps Les fichiers locaux sont prévisibles. Ils fonctionnent en ligne, suppriment la variabilité de réseau, et sont plus faciles à tester. Ils sont également faciles à sur-emballager.

La livraison à distance maintient le binaire plus léger, mais maintenant votre animation a des préoccupations d'accessibilité, de mise en cache et de redondance. Ce compromis est acceptable pour des mouvements non critiques. C'est risqué pour les états UX primaires comme la confirmation d'achat ou le succès de l'authentification.

For teams doing serious mobile performance work,

AppLighter’s guide to mobile performance is a useful companion read because it puts animation decisions in the larger context of app startup, rendering, and framework trade-offs. One hard truth: A beautiful animation that delays first interaction is usually a product bug, not a design win. You should also think beyond React Native in isolation. Teams working in hybrid stacks run into similar asset-loading problems, and the broader animation performance guidance for __CAPGO_KEEP_0__ apps maps well to Lottie decisions too. Local files versus remote delivery Local files are predictable. They work offline, remove network variability, and are easier to test. They’re also easy to over-bundle. 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 Meilleure valeur par défaut
Animation d'interaction de base Local, optimisé, pas trop grand
Mouvement promotionnel occasionnel À distance avec un fallback
Animation du chemin d'exécution Seulement local si absolument nécessaire
Illustration de la fonctionnalité rarement utilisée Chargement à la demande

Si vous n'appliquez qu'une seule règle de cette section, utilisez celle-ci: traiter les Lottie JSONs comme des actifs performants, pas comme une décoration sans danger.

Résolution des problèmes courants 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.

L'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 différente connue et bonne. Cela vous dit si le problème est le fichier ou la configuration.

La lecture est chaotique sur les appareils plus anciens

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

Essayez ces corrections :

  • Réduire la complexité de l'animation : Demandez une exportation plus légère si le fichier source est lourd.
  • Charger plus tard : N'entrez pas en concurrence avec le travail de l'écran initial.
  • Testez une version compressée : Si le fichier compressé se comporte mieux, vous avez trouvé le point de blocage.
  • Supprimez plusieurs vues Lottie simultanées : Plusieurs animations sur un écran peuvent être trop nombreuses.

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

Les références nulles signifient généralement que le déclencheur se déclenche avant la mise en page, ou que le composant a été supprimé conditionnellement.

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

Conservez la référence stable avec __CAPGO_KEEP_0__ et n'en créez pas inutilement le composant animé. Si vous déboguez des comportements étranges répétitifs dans les builds locaux, la suppression des caches stables peut vous aider. Un routine de nettoyage simple de cache Yarn useRefest parfois suffisant pour supprimer le comportement des actifs trompeurs pendant le développement. L'animation a l'air fausse sur les tailles d'écran est parfois suffisant pour supprimer le comportement des actifs trompeurs pendant le développement.

L'animation a l'air fausse sur les tailles d'écran.

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

  • Utilisez des limites fixes pour les icônes et les réactions
  • Utilisez des enveloppes sensibles à l'aspect pour les illustrations plus grandes
  • Évitez de s'étirer jusqu'à la largeur maximale sans vérifier la composition exportée.

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 aide les équipes à envoyer les correctifs JavaScript, d'actifs et de configuration vers les applications Capacitor sans attendre la revue de l'App Store. Si vous maintenez une application hybride et que vous avez besoin d'une méthode plus sûre pour envoyer des mises à jour, gérer les lancements étalés et récupérer rapidement des problèmes de front-end. Capgo vaut la peine d'une visite.

Mises à jour en temps réel pour les applications Capacitor

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

Commencez dès maintenant

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.