Zum Hauptinhalt springen
Mobil Anleitungen

Lottie React Native: Expo und Bare CLI Setup, Steuerung, Tipps

Unser umfassender Leitfaden zeigt dir, wie du lottie react native nutzt. Er deckt Expo- und Bare-Workflows, Animationssteuerung, Performance-Tuning und Best Practices für 2026 ab.

Lottie React Native

Du stehst wahrscheinlich vor einer von zwei Situationen. Entweder übergibt dir ein Designer eine Lottie-JSON-Datei und fragt: „Können wir das noch heute in die App bekommen?“, oder du hast es bereits integriert und festgestellt, dass die Animation in der Entwicklung läuft, aber auf echten Geräten, bei der Startzeit und in Release-Builds schnell teuer wird.

Genau hier wird Lottie React Native interessant. Die Basis-Demo ist einfach. Eine produktionsreife Implementierung nicht. Der Unterschied liegt meist darin, wie du es installierst, wie du die Wiedergabe steuerst und ob du Animationsdateien als harmlose Assets behandelst oder als Teil deines Performance-Budgets.

Inhaltsverzeichnis

Warum Lottie essenziell für React Native Apps ist

Wer schon einmal versucht hat, eine hochwertige Produktanimation manuell in React Native nachzubauen, kennt den Schmerz. Kleine Details in der Bewegung verwandeln sich in einen Berg aus Timing-Logik, Interpolationen und Plattform-Eigenheiten. Die Animation mag ähnlich aussehen, aber „ähnlich“ ist meistens nicht das, was das Design vorgibt.

Lottie hat diesen Workflow verändert. Airbnb hat Lottie 2016 Open Source gestellt, und dieser Release hat mobile Animationen verändert, indem Designer Animationen direkt ausliefern konnten, statt dass Engineers sie Frame für Frame nachbauen mussten. In einigen Enterprise-Umgebungen senkte dieser Wandel die Entwicklungskosten für mobile Apps um bis zu 40 %komprimieren können, laut Lottie-Übersicht von Airbnb.

Design und Engineering führen nicht mehr denselben Kampf

Ein wesentlicher Vorteil von Lottie React Native liegt nicht nur in „schönen Animationen in JSON“. Es ist die Trennung der Zuständigkeiten. Designer arbeiten in After Effects und exportieren mit Bodymovin. Entwickler rendern die Ausgabe mit nativem Playback, statt Bewegung in eigenen code umzusetzen.

Das ist wichtig, weil Animationsarbeit dazu neigt, sich auszubreiten. Eine einzelne Feier-Animation kann Design-Review, Produkt-Review, Android-Verhalten, iOS-Verhalten, Barrierefreiheit und Startperformance betreffen. Lottie verkleinert diese Oberfläche.

Praktische Regel: Nutze Lottie, wenn die Animation Teil des Produkt-Erlebnisses ist, nicht wenn du nur eine einfache Opacity- oder Translate-Übergang brauchst.

Es gibt auch einen UX-Aspekt. Bewegung gibt Feedback, bestätigt Aktionen und lässt Ladezustände weniger tot wirken. Wenn dein Team ernsthaft über Polish, Retention oder Vertrauen in die Oberfläche nachdenkt, ist Animation Teil dieser Diskussion. Die breitere Diskussion über das App-User-Experience endet meist am selben Ort: schnelles Feedback schlägt statische Screens.

Wo Lottie am besten passt

Lottie React Native funktioniert am besten für:

  • Branded Micro-Interactions wie Likes, Saves, Häkchen und Kauf-Erfolgszustände
  • Onboarding-Illustrationen die sich individuell anfühlen sollen, ohne Video zu shippen
  • Loading- und Empty-States in denen statische UI unvollständig wirkt
  • Feature-Erklärung wenn das Produkt Motion will, ohne GIFs oder MP4s einzubetten

Was es nicht löst, ist jedes Animationsproblem. Für einfache Screen-Transitions sind die eigenen Animationstools von React Native oft einfacher. Für sehr große oder hochinteraktive Motion-Systeme kann das JSON-Format zum Trade-off statt zum Vorteil werden. Dieser Trade-off wird wichtiger, sobald man in Produktion geht – genau dort hören die meisten Tutorials zu früh auf.

Deine Lottie-Entwicklungsumgebung einrichten

Der Installationspfad hängt zunächst von einer Entscheidung ab: Expo Managed Workflow oder Bare React Native. Verwechselt die Mental Models nicht. Die meisten Setup-Probleme entstehen, wenn Entwickler in Expo einem Bare-Workflow-Guide folgen oder annehmen, Expo abstrahiere jedes native Detail.

Ein Flussdiagramm, das die Einrichtungsschritte für Lottie-Animationen in Expo- und Bare React Native-Projekten zeigt.

Wähle den Workflow, bevor du installierst

Wenn deine App in Expo läuft und du das schnellste Setup willst, bleib auf dem Expo-Pfad, es sei denn, du weißt, dass du Custom Native Work brauchst. Wenn du eine Bare App nutzt oder bereits auf Native Modules angewiesen bist, die direkte Kontrolle erfordern, installiere es als normale native Abhängigkeit und validiere sofort beide Builds für iOS und Android.

Viele Teams unterschätzen, wie viel einfacher das Debugging wird, wenn das Setup zum Projekttyp passt. Deshalb vergleichen viele Teams, die Custom Native Integrations bauen, Capgo als Alternative zu Expo EAS früh, anstatt zu warten, bis die App schwerer zu ändern ist.

Expo Managed Setup

Für Expo-gemanagte Apps: Halte es minimal.

  1. Paket installieren

    npx expo install lottie-react-native
  2. Metro neu starten

    npx expo start -c
  3. Auf dem Gerät oder Simulator testen Beginne mit einer lokalen JSON-Datei und rendere zuerst eine sehr kleine Animation. Debugge nicht gleichzeitig ein großes Asset und eine Neuinstallation.

Ein paar praktische Hinweise für Expo:

  • Nutze zuerst lokale Dateien: Das Debuggen von Remote-Animationen erzeugt Netzwerk-Rauschen, wenn du eigentlich nur prüfen willst, ob die Library funktioniert.
  • Release-Verhalten früh testen: Der Development-Modus kann Probleme bei Timing und Performance verbergen.
  • Asset-Pfade prüfen: Falsch platzierte JSON-Dateien sind eine der häufigsten Ursachen für „es rendert nichts“.

Expo ist der schnellste Weg zu „es funktioniert“. Das bedeutet aber nicht, dass es der schnellste Weg zu „es skaliert“ ist.

Bare React Native Setup

Installiere und validiere in einem Bare-Projekt sofort die native Dependencies.

  1. Paket installieren

    npm install lottie-react-native
  2. iOS Pods installieren

    cd ios && pod install && cd ..
  3. App neu bauen

    npx react-native run-ios

    oder

    npx react-native run-android

Hier ist der Punkt, den viele Quick-Start-Guides überspringen: Führe nach der Installation einen vollständigen nativen Rebuild durch, bevor du annimmst, dass etwas kaputt ist. Hot Reload kann eine native Dependency nicht retten, die nicht korrekt in die App kompiliert wurde.

Bare Workflow-Checks, die Zeit sparen

Nutze diese kurze Checkliste, bevor du weitermachst:

Prüfen Warum das wichtig ist
Neu kompilieren nach Installation Native Module erfordern eine frische Kompilierung
Ausführen pod install Ohne das ist iOS nicht zuverlässig
Zuerst eine einfache lokale JSON-Datei verwenden Trennt Installationsprobleme von Asset-Problemen
Teste beide Plattformen früh Android und iOS können aus unterschiedlichen Gründen fehlschlagen

Wenn das Paket sauber installiert wird, aber deine erste Animation nicht angezeigt wird, liegt es in der Regel nicht an der Installation. Meistens ist es der Asset-Pfad, die Komponentengröße oder die Wiedergabekonfiguration.

Deine erste Lottie-Animation anzeigen

Die erste funktionierende Animation sollte langweilig sein. Lokale Datei. Feste Größe. Autoplay an. Loop optional. Fang nicht mit bedingter Wiedergabe, Remote-JSON oder einem Animationsexport mit vielen Ebenen an.

Ein moderner Entwickler-Workspace mit einem Laptop, auf dem code angezeigt wird, und einem Monitor, der eine mobile Animations-App zeigt.

Eine lokale Animationsdatei hinzufügen

Lege einen Asset-Ordner an, falls du noch keinen hast:

assets/
  animations/
    success.json

Halte die Namen einfach. Vermeide Leerzeichen, ungewöhnliche Satzzeichen und Ordner mit vielen Verschachtelungsebenen. Du willst, dass die require() Pfade klar bleiben.

Wenn du Lottie für einen anfänglichen gebrandeten Ladebildschirm oder die Übergabe nach dem Start nutzt, denk genau darüber nach, bevor du eine große Animation in den Startpfad packst. Das gilt besonders, wenn du gleichzeitig dein React Native Splash-Screen-Verhalten.

Rendere es mit LottieView

Erstelle eine eigene Komponente, statt es direkt in eine große Screen-Datei zu packen:

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

Das bringt drei nützliche Dinge:

  • Es beweist, dass die Bibliothek korrekt rendert.
  • es beweist, dass der Asset-Pfad korrekt aufgelöst wird
  • es gibt dir einen isolierten Ort, um Wiedergabe und Größe später anzupassen

Ein paar Stolperfallen zeigen sich sofort, wenn du die Basics überspringst:

  • Keine Breite oder Höhe: Die Animation kann existieren, aber unsichtbar sein.
  • Falsch require() Pfad: Metro findet die Datei nicht.
  • Ungültiger Export: Einige JSON-Dateien sind technisch gültig, enthalten aber Features, die auf Mobile nicht wie erwartet funktionieren.

Halte den ersten Render lokal und deterministisch. Du testest die Integration, nicht die Architektur.

Ein besserer Test für den ersten Screen

Platziere die Komponente auf einem einfachen Screen mit neutralem Hintergrund:

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

Wenn das in beiden Simulatoren (iOS und Android) funktioniert, hast du die erste echte Hürde genommen. Der nächste Schritt ist nicht, weitere Animationen hinzuzufügen. Es geht darum zu lernen, wann du deklarative Props nutzt und wann du mit Refs die direkte Kontrolle übernimmst.

Lottie-Animation-Controls meistern

Die meisten Lottie React Native Bugs treten auf, wenn die Animation auf State reagieren muss. Autoplay ist einfach. „Dieses Segment abspielen, wenn der Nutzer einen Artikel liked, rückwärts abspielen, wenn er ihn unliked, und nicht stottern, wenn die Komponente neu gerendert wird“ – da wird es unübersichtlich.

Ein Vergleichsdiagramm, das deklarative und imperative Methoden zur Animationssteuerung in Lottie erklärt und ihre spezifischen Anwendungsfälle hervorhebt.

Props nutzen bei einfacher Wiedergabe

Für nicht-interaktive Wiedergabe reichen Props aus.

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

Dieser Stil eignet sich für:

  • Ladeindikatoren
  • passive Onboarding-Illustrationen
  • dekorative Empty States

Es ist deklarativ und lesbar. Die Komponente wird gemountet, die Wiedergabe startet und React behält die Kontrolle. Wenn die Animationslogik rein über Props beschrieben werden kann, bleib dabei.

Ein fortgeschrittener deklarativer Fall ist progress, wenn du den Animationsframe an einen anderen Wert koppelst. Das funktioniert gut, wenn die Bewegung eine externe Fortschrittsquelle widerspiegeln soll, ist aber für einmalige Trigger-Events weniger praktisch.

Hier ist ein kurzer visueller Vergleich, bevor wir zu Refs übergehen:

Refs nutzen, wenn State die Animation steuert

Wenn der User tippt, umschaltet oder eine Aktion abschließt, ist ein Ref meist das sicherere Tool. Praxisdaten zeigen: 68 % der Entwickler, die Hybrid-Frameworks nutzen, berichten von fehlgeschlagenen Animationstriggern durch fehlerhaftes Ref-Handling in useEffect Hooks, weshalb zuverlässige Patterns, die darauf aufbauen, animation.current.play() wichtig sind, wie in dieser Capacitor-fokussierte Diskussion zu fehlgeschlagenen Triggern.

Das Problem beschränkt sich nicht nur auf Hybrid-Apps. Es tritt auch in reinem React Native auf, besonders wenn Entwickler Refs neu erstellen, das Playback vor dem Mount triggern oder Animationsaufrufe an instabile Effects binden.

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

Ein zuverlässiges Like/Unlike-Pattern

Dieses Pattern ist in der Produktion deutlich stabiler als das Aufrufen play() innerhalb useEffect bei jeder State-Änderung.

Warum es funktioniert:

  • Das Event steuert den Animationstrigger: Ein Press-Event ist ein stabiler Zeitpunkt für den Playback-Start.
  • Die Ref bleibt lokal und persistent: useRef vermeidet unnötige Rerenders.
  • Die Komponente vermeidet Autoplay-Konflikte: Das Mount-Verhalten sollte nicht mit benutzergesteuerten Aktionen kollidieren.

Häufige Fehler, die man vermeiden sollte:

  1. Auslösen, bevor die Ref existiert
    Wenn animationRef.current ist null, die Wiedergabe findet nicht statt. Prüfe das.

  2. Verwendung autoPlay mit imperativen Controls
    Wähle einen Standard-Owner für die Wiedergabe.

  3. Driving everything through useEffect
    Effekte sind nützlich, aber bei UI-Aktionen verursachen sie oft Timing-Probleme, statt sie zu lösen.

Wenn eine Animation auf einen Tap reagiert, trigger sie zuerst im Tap-Handler. Nutze sie useEffect nur dann, wenn die Source of Truth außerhalb dieser Interaktion liegt.

Performance-Tuning für Production-Apps

Lottie React Native ist eine dieser Libraries, die leichtgewichtig wirken, bis Teams riesige JSON-Dateien in das App-Bundle packen und sich wundern, warum die Startup-Zeit schlechter wird. Die Animation selbst ist nicht immer das Problem. Die Delivery-Strategie ist es.

Eine Infografik mit drei Vorteilen von Lottie-Performance-Tuning: reduzierte Bundle-Größe, bessere Framerates und geringerer Speicherverbrauch.

Wo Teams in Schwierigkeiten geraten

Der naheliegendste Fehler ist, jede Animation direkt in JavaScript zu bündeln und alles zu früh zu laden. Laut diesem Guide zum falschen Ausliefern von Lottie JSONs, kann das Überladen von JS-Bundles mit Assets wie Lottie JSONs die App-Startzeiten um 40 % oder mehr auf Mittelklassegeräten erhöhen., und sie als native Assets für das On-Demand-Loading bereitzustellen, ist eine entscheidende Optimierung.

Das deckt sich mit dem, was viele Teams in der Praxis beobachten. Das Problem ist nicht eine einzelne kleine Erfolgs-Animation. Es ist die Anhäufung:

  • Onboarding-Animation
  • Loader-Status
  • E-Commerce-Reaktionen
  • Branded Empty Screens
  • Locale-Dateien und andere bundle-lastige Assets, die daneben liegen

Wenn deine App bereits ein Problem mit dem Startup-Budget hat, können Lottie-Dateien die Lage schnell verschlimmern.

Was man zuerst optimieren sollte

Beginne mit dem Export selbst. Ein schlampiger Animations-Export bringt Komplexität mit sich, die du später beim Parsen, im Speicher und bei der Render-Stabilität bezahlst. Nimm nicht jeden Designer-Export ungeprüft an.

Nutze diese Produktions-Checkliste:

  • Komprimiere das JSON vor dem Versand: Kleinere Dateien laden leichter und bloaten das Startup weniger.
  • Verschiebe nicht-kritische Animationen aus dem JS-Bundle: Halte den Launch code auf das beschränkt, was die App sofort braucht.
  • Animationen bei Bedarf laden: Rendern, wenn der Screen oder die Aktion es benötigt.
  • Verhalten auf älteren Geräten prüfen: Ein moderner Simulator kann aufwendige Wiedergabe verbergen.
  • Große Lottie-Dateien nicht als Startdekor verwenden: Wenn es für die erste Interaktion nicht kritisch ist, sollte es nicht mit dem App-Start konkurrieren.

Für Teams, die ernsthaft an der mobilen Performance arbeiten, AppLighters Guide zur mobilen Performance ist eine nützliche Ergänzung, da sie die Entscheidungen zur Animation in den größeren Kontext von App-Start, Rendering und Framework-Abwägungen einordnet.

Eine harte Wahrheit: Eine schöne Animation, die die erste Interaktion verzögert, ist in der Regel ein Produkt-Bug, kein Design-Sieg.

Man sollte auch über React Native isoliert hinausdenken. Teams, die in hybriden Stacks arbeiten, stoßen auf ähnliche Asset-Loading-Probleme, und der breitere Leitfaden zur Animationsperformance für Capacitor-Apps passt auch gut zu Lottie-Entscheidungen.

Lokale Dateien vs. Remote-Auslieferung

Lokale Dateien sind vorhersehbar. Sie funktionieren offline, eliminieren Netzwerk-Schwankungen und sind leichter zu testen. Allerdings ist es leicht, zu viel zu bündeln.

Remote-Delivery hält das Binary schlanker, bringt aber Verfügbarkeits-, Caching- und Fallback-Fragen mit sich. Dieser Trade-off ist für nicht-kritische Motion akzeptabel. Für primäre UX-Zustände wie Kaufbestätigung oder Authentifizierungserfolg ist er riskant.

Eine praktische Aufteilung funktioniert gut:

Asset-Typ Bessere Standardwahl
Kern-Interaktionsanimation Lokal, optimiert, nicht zu groß
Gelegentliche Promo-Motion Remote mit Fallback
Startbildschirm-Animation Nur lokal, wenn es unbedingt nötig ist
Illustration für selten genutzte Funktionen Laden bei Bedarf

Wenn du nur eine Regel aus diesem Abschnitt befolgst, dann diese: behandle Lottie-JSONs als performancekritische Assets, nicht als harmlose Dekoration.

Häufige Lottie-Probleme lösen

Wenn Lottie Probleme macht, ist die Ursache meist banal: falscher Pfad, fehlende Größe, schlechtes Ref-Timing, zu fette JSON. Am schnellsten debuggst du, indem du die Variablen reduzierst.

Animation wird auf Android nicht gerendert

Prüfe zuerst, ob die JSON-Datei aufgelöst wird. Gib der Komponente danach explizite Dimensionen.

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

Falls das immer noch fehlschlägt, teste eine andere, funktionierende Animation. So findest du heraus, ob das Problem an der Datei oder am Setup liegt.

Playback ruckelt auf älteren Geräten

Das deutet meist auf das Asset hin, nicht auf die Komponente API.

Versuche diese Fixes:

  • Reduziere die Komplexität der Animation: Fordere einen leichteren Export an, wenn die Quelldatei zu groß ist.
  • Später laden: Nicht mit dem Initial-Screen konkurrieren.
  • Eine komprimierte Version testen: Läuft die komprimierte Datei besser, hast du den Engpass gefunden.
  • Mehrere gleichzeitige Lottie-Views entfernen: Mehrere Animationen auf einem Screen können zu viel sein.

Ref ist null oder play macht nichts

Null-Refs heißen meist, der Trigger feuert vor dem Mount oder die Komponente wurde bedingt entfernt.

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

Halte die Ref stabil mit useRef, und erstelle die animierte Komponente nicht unnötig neu. Wenn du wiederkehrende seltsame Fehler in lokalen Builds debuggst, kann das Leeren veralteter Caches helfen. Ein einfaches Yarn-Cache-Aufräumroutine reicht manchmal aus, um irreführendes Asset-Verhalten während der Entwicklung zu beseitigen.

Animation sieht auf verschiedenen Displaygrößen falsch aus

Lass die Animation das Layout nicht bestimmen. Platziere sie in einem Container und bestimme die Größe bewusst.

  • Nutze feste Grenzen für Icons und Reaktionen
  • Nutze aspect-ratio-bewusste Wrapper für größere Illustrationen
  • Vermeide das Dehnen auf volle Breite, ohne die beabsichtigte Komposition des Exports zu prüfen

Die meisten „Lottie ist kaputt“-Meldungen erweisen sich am Ende als Layout-, Asset- oder Timing-Probleme. Die Bibliothek tut oft genau das, was du von ihr verlangt hast.

Wenn du einen letzten Debugging-Shortcut brauchst, entferne alle fortgeschrittenen Props, rendere eine lokale Animation in einer zentrierten View und baue von dort aus wieder auf. Dieser Ansatz isoliert Probleme schneller, als auf einem überfüllten Production-Screen zu starren.


Capgo hilft Teams, JavaScript-, Asset- und Config-Fixes an Capacitor-Apps zu shippen, ohne auf die Store-Review zu warten. Wenn du eine Hybrid-App pflegst und eine sicherere Möglichkeit brauchst, Updates zu pushen, gestaffelte Rollouts zu handhaben und dich schnell von Frontend-Problemen zu erholen, Capgo lohnt einen Blick.

Live-Updates für Capacitor-Apps

Wenn ein Bug im Web-Layer live ist, liefere den Fix über Capgo aus, statt Tage auf die App-Store-Freigabe zu warten. Nutzer bekommen das Update im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Neues aus unserem Blog

Capgo gibt dir die besten Insights, um eine wirklich professionelle Mobile App zu erstellen.