Zum Hauptinhalt springen
Mobil Anleitungen

Lottie React Native

Unser Guide zeigt dir die Nutzung von lottie react native. Inklusive Expo & bare Workflows, Animationssteuerung, Performance-Tuning und Best Practices für 2026.

Lottie React Native

Du befindest dich wahrscheinlich gerade in einer dieser zwei Situationen: Entweder übergibt dir ein Designer eine Lottie JSON und fragt: „Können wir das heute noch in die App bringen?“, oder du hast es bereits implementiert und merkst, dass die Animation in der Entwicklung läuft, aber Performance-Probleme auftreten, sobald echte Geräte, Startup-Zeiten und Release-Builds ins Spiel kommen.

Hier wird Lottie React Native spannend. Die Basis-Demo ist einfach, eine produktionsreife Implementierung hingegen nicht. Der Unterschied liegt meist darin, wie du es installierst, wie du das Playback steuerst und ob du Animationsdateien als harmlose Assets oder als Teil deines Performance-Budgets behandelst.

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 revolutioniert. Airbnb hat Lottie 2016 Open Source veröffentlicht, 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 Shift die Entwicklungskosten für mobile Apps um bis zu 40%, according to Airbnbs Lottie-Übersicht.

Design und Engineering müssen nicht mehr denselben Kampf führen

Ein entscheidender Vorteil von Lottie React Native ist nicht nur „hübsche JSON-Animationen“. Es ist die Trennung der Zuständigkeiten. Designer arbeiten in After Effects und exportieren mit Bodymovin. Entwickler rendern das Ergebnis mit nativem Playback, anstatt Bewegungen mühsam in eigenen code nachzubauen.

Das ist wichtig, weil Animationsarbeit dazu neigt, sich überall auszubreiten. Eine einzige Animationssequenz für einen Erfolgsstatus kann das Design-Review, das Product-Review, das Android- und iOS-Verhalten, die Barrierefreiheit und die Startup-Performance beeinflussen. Lottie reduziert diese Komplexität.

Praktische Regel: Nutze Lottie, wenn die Animation Teil des Produkterlebnisses ist, und nicht nur für einfache Opacity- oder Translate-Übergänge.

Es gibt auch die UX-Perspektive. Motion gibt Feedback, bestätigt Aktionen und lässt Ladezustände lebendiger wirken. Wenn dein Team ernsthaft über Polish, Retention oder Vertrauen in die UI nachdenkt, gehört Animation zu diesem Thema. Die breitere Diskussion über die App-User-Experience endet meist am selben Punkt: Schnelles Feedback schlägt statische Screens.

Wo Lottie am besten passt

Lottie React Native eignet sich am besten für:

  • Branded Micro-Interactions wie Likes, Speichern, Häkchen oder Kaufbestätigungen
  • Onboarding-Illustrationen die sich individuell anfühlen sollen, ohne Videos zu nutzen
  • Loading- und Empty-States wo statische UIs unfertig wirken
  • Feature-Erklärungen wenn Motion gewünscht ist, ohne GIFs oder MP4s einzubetten

Es löst jedoch nicht jedes Animationsproblem. Für einfache Screen-Transitions sind die hauseigenen Animationstools von React Native oft simpler. Bei sehr großen oder hochgradig interaktiven Motion-Systemen kann das JSON-Format eher ein Nachteil als ein Vorteil sein. Dieser Trade-off wird besonders im Production-Bereich relevant – genau dort, wo die meisten Tutorials zu früh aufhören.

Einrichten deiner Lottie-Development-Umgebung

Der Installationspfad hängt zuerst von einer Entscheidung ab: Expo Managed Workflow oder Bare React Native. Vermische die Mental Models nicht. Die meisten Setup-Probleme entstehen, wenn Entwickler eine Bare-Workflow-Anleitung innerhalb von Expo befolgen oder davon ausgehen, dass Expo jedes native Detail abstrahiert.

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

Wähle den Workflow vor der Installation

Wenn deine App in Expo läuft und du das schnellste Setup willst, bleib auf dem Expo-Pfad, außer du weißt, dass du custom native Arbeit benötigst. Wenn du eine Bare-App nutzt oder bereits auf native Module angewiesen bist, die direkte Kontrolle erfordern, installiere es als normale native Dependency und validiere sofort sowohl die iOS- als auch die Android-Builds.

Viele Teams unterschätzen, wie viel einfacher das Debugging wird, wenn das Setup zum Projekttyp passt. Deshalb vergleichen auch viele Teams, die custom native Integrationen bauen, Capgo als Alternative zu Expo EAS schon frühzeitig, anstatt zu warten, bis die App schwerer zu ändern ist.

Expo Managed Setup

Halte es minimal für Expo-managed Apps.

  1. Package installieren

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

    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:

  • Bevorzuge 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ühzeitig 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 wird nichts gerendert“.

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 Native Build 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üfe Warum das wichtig ist
Nach Installation neu bauen Native Module müssen neu kompiliert werden
Ausführen pod install Ohne das wird iOS unzuverlässig
Nutze zuerst ein einfaches lokales JSON Isoliert Installationsfehler von Asset-Problemen
Teste beide Plattformen frühzeitig Android und iOS können aus unterschiedlichen Gründen scheitern

Wenn das Package sauber installiert ist, aber die erste Animation nicht erscheint, liegt das meist nicht an der Installation. Meist ist es der Asset-Pfad, die Component-Größe oder die Playback-Konfiguration.

Deine erste Lottie-Animation anzeigen

Die erste funktionierende Animation sollte simpel sein. Lokale Datei. Feste Größe. Autoplay an. Loop optional. Starte nicht mit conditional Playback, remote JSON oder komplexen, vielschichtigen Animationen.

Ein moderner Developer-Workspace mit einem Laptop, der code zeigt, und einem Monitor mit einer mobilen Animations-App.

Eine lokale Animationsdatei hinzufügen

Erstelle einen Asset-Ordner, falls du noch keinen hast:

assets/
  animations/
    success.json

Halte die Namen einfach. Vermeide Leerzeichen, Sonderzeichen und tief verschachtelte Ordnerstrukturen. Du willst require() Pfade, die übersichtlich bleiben sollten.

Wenn du Lottie für einen initialen Branded Loading Screen oder einen Übergang nach dem Launch nutzt, überlege dir gut, ob du eine große Animation direkt in den Startup-Pfad einbaust. Das gilt besonders, wenn du auch dein React Native Splash Screen Verhalten optimierst.

Mit LottieView rendern

Erstelle eine eigene Komponente, anstatt sie direkt in eine große Screen-Datei zu werfen:

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 bietet drei entscheidende Vorteile:

  • es bestätigt, dass die Library korrekt rendert
  • es bestätigt, dass der Asset-Pfad korrekt aufgelöst wird
  • es bietet dir einen isolierten Ort, um Playback und Größe später anzupassen

Ein paar Fallstricke treten sofort auf, wenn du die Basics überspringst:

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

Halte das erste Rendering 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 sowohl im iOS- als auch im Android-Simulator funktioniert, hast du die erste echte Hürde genommen. Der nächste Schritt ist nicht, mehr Animationen hinzuzufügen. Es geht darum zu lernen, wann man deklarative Props nutzt und wann man die direkte Kontrolle mit Refs übernimmt.

Lottie Animation Controls meistern

Die meisten Lottie React Native Bugs treten auf, wenn die Animation auf State reagieren muss. Autoplay ist einfach. Aber „Spiele dieses Segment, wenn der User ein Item liked, kehre es um, wenn er es unliked, und lass es nicht ruckeln, wenn die Komponente neu rendert“ – genau hier wird es kompliziert.

Eine Vergleichstabelle, die deklarative vs. imperative Animationssteuerung in Lottie erklärt und deren spezifische Use Cases 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 Ansatz eignet sich für:

  • Ladeindikatoren
  • passive Onboarding-Illustrationen
  • dekorative Empty States

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

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

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 entscheidend sind, wie in dieser animation.current.play() wie hier bereits erwähnt Capacitor-fokussierte Diskussion fehlgeschlagener Trigger.

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 Aufrufe play() innerhalb von useEffect bei jeder State-Änderung.

Warum es funktioniert:

  • Das Event steuert den Animationstrigger: Ein Press-Event ist ein stabiler Moment 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 User-Interaktionen kollidieren.

Häufige Fehler, die man vermeiden sollte:

  1. Triggerung, bevor die Ref existiert
    Wenn animationRef.current null ist, startet der Playback nicht. Nutze einen Guard.

  2. Using autoPlay mit imperativen Controls
    Wähle genau einen Default-Owner für den Playback.

  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, triggere sie zuerst im Tap-Handler. Nutze useEffect externe Quellen nur, wenn die Single Source of Truth außerhalb dieser Interaktion liegt.

Performance-Tuning für Production-Apps

Lottie React Native wirkt leichtgewichtig, bis Teams riesige JSON-Dateien in das App-Bundle packen und sich wundern, warum die Startup-Zeit sinkt. Nicht immer ist die Animation das Problem, sondern die Delivery-Strategie.

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

Wo Teams Fehler machen

Der häufigste Fehler ist, jede Animation direkt in JavaScript zu bündeln und alles zu früh zu laden. Laut diesem Guide über fehlerhaftes Lottie JSON Shippingkann das Überladen von JS-Bundles mit Assets wie Lottie JSONs die App-Startzeiten um 40 % oder mehr auf Mittelklasse-Geräten erhöhen, und sie in native Assets für On-Demand-Loading zu verschieben, ist eine entscheidende Optimierung.

Das deckt sich mit den Erfahrungen vieler Teams in der Praxis. Das Problem ist nicht eine einzelne kleine Erfolgsanimation. Es ist die Anhäufung:

  • Onboarding-Animationen
  • Loader-States
  • E-Commerce-Reaktionen
  • Branded Empty Screens
  • Locale-Dateien und andere Bundle-lastige Assets direkt daneben

Wenn deine App bereits Probleme mit dem Startup-Budget hat, können Lottie-Files das schnell verschlimmern.

Was zuerst optimiert werden sollte

Beginne beim Export selbst. Ein unsauberer Animations-Export bringt Komplexität mit sich, die du später beim Parsing, beim Speicherverbrauch und bei der Render-Stabilität bezahlen wirst. Akzeptiere Designer-Exporte nicht einfach ungeprüft.

Nutze diese Production-Checkliste:

  • Komprimiere das JSON vor dem Deployment: Kleinere Dateien laden schneller und blähen den Startup nicht auf.
  • Verschiebe nicht-kritische Animationen aus dem JS-Bundle: Halte den code fokussiert auf das, was die App sofort braucht.
  • Animationen nach Bedarf laden: Erst rendern, wenn der Screen oder die Aktion es erfordert.
  • Verhalten auf Altgeräten prüfen: Ein moderner Simulator kann teure Playbacks kaschieren.
  • Vermeide große Lottie-Dateien als Startup-Deko: Wenn es für die erste Interaktion nicht kritisch ist, sollte es den App-Launch nicht behindern.

Für Teams, die ernsthaft an der mobilen Performance arbeiten, AppLighters Guide zur mobilen Performance ist eine hilfreiche Lektüre, da sie Entscheidungen bei Animationen in den größeren Kontext von App-Startup, Rendering und Framework-Trade-offs setzt.

Eine harte Wahrheit: Eine schöne Animation, die die erste Interaktion verzögert, ist meist ein Bug, kein Design-Erfolg.

Man sollte auch über React Native hinausdenken. Teams mit Hybrid-Stacks haben ähnliche Probleme beim Laden von Assets, und die allgemeine Performance-Leitlinie für Capacitor Apps maps well to Lottie decisions too.

Lokale Dateien vs. Remote-Auslieferung

Lokale Dateien sind berechenbar. Sie funktionieren offline, eliminieren Netzwerk-Varianz und sind leichter zu testen. Aber man kann sie leicht überdimensionieren.

Remote-Auslieferung hält das Binary schlank, bringt aber Themen wie Verfügbarkeit, Caching und Fallbacks mit sich. Das ist bei unkritischen Animationen okay, aber riskant bei Kern-UX-States wie Kaufbestätigungen oder Logins.

Eine praktische Aufteilung:

Asset-Typ Bessere Standardwahl
Core-Interaktionsanimation Lokal, optimiert, nicht zu groß
Gelegentliche Promo-Animationen Remote mit Fallback
Startup-Pfad-Animation Lokal nur wenn absolut nötig
Selten genutzte Feature-Illustration On-demand laden

Wenn Sie nur eine Regel aus diesem Abschnitt anwenden, dann diese: behandeln Sie Lottie-JSONs als performancekritische Assets, nicht als harmlose Deko.

Häufige Lottie-Probleme lösen

Wenn Lottie Fehler wirft, ist die Ursache meist trivial. Falscher Pfad. Fehlende Größe. Timing der Ref ist schlecht. Zu große JSON. Der schnellste Weg zum Debugging ist, die Variablen zu reduzieren.

Animation wird auf Android nicht gerendert

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

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

Falls das nicht hilft, teste eine andere, funktionierende Animation. So siehst du, ob das Problem an der Datei oder am Setup liegt.

Die Wiedergabe ruckelt auf älteren Geräten

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

Versuche diese Fixes:

  • Komplexität der Animation reduzieren: Fordere einen leichteren Export an, falls die Quelldatei zu groß ist.
  • Später laden: Konzentriere dich nicht auf die Arbeit am Initial Screen.
  • Eine komprimierte Version testen: Wenn die komprimierte Datei besser läuft, hast du den Flaschenhals gefunden.
  • Mehrere gleichzeitige Lottie-Views vermeiden: Zu viele Animationen auf einem Screen können überfordern.

Die Ref ist null oder play macht nichts

Null-Refs bedeuten meist, dass der Trigger vor dem Mount feuert oder die Komponente bedingt entfernt wurde.

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

Halte die Ref stabil mit useRef, und erstelle die animierte Komponente nicht unnötig neu. Wenn du bei lokalen Builds seltsame Fehler debuggst, hilft oft das Leeren veralteter Caches. Eine einfache Yarn-Cache-Bereinigung reicht manchmal aus, um irreführendes Asset-Verhalten während der Entwicklung zu beheben.

Die Animation sieht bei verschiedenen Bildschirmgrößen falsch aus

Lass die Animation nicht das Layout bestimmen. Pack sie in einen Container und setze die Größe gezielt.

  • Nutze feste Bounds für Icons und Reactions
  • Nutze Aspect-aware Wrappers für größere Illustrationen
  • Vermeide das Strecken auf die volle Breite, ohne die beabsichtigte Komposition des Exports zu prüfen

Die meisten „Lottie ist kaputt“-Meldungen sind eigentlich Layout-, Asset- oder Timing-Probleme. Die Library macht oft genau das, was man ihr gesagt hat.

Ein schneller Debugging-Shortcut: Entferne alle erweiterten Props, rendere eine lokale Animation in einer zentrierten View und baue alles schrittweise wieder auf. So isolierst du Probleme schneller, als wenn du auf einen überladenen Production-Screen starrst.


Capgo hilft Teams, JavaScript-, Asset- und Config-Fixes an Capacitor Apps auszuliefern, ohne auf den Store-Review zu warten. Wenn du eine Hybrid-App betreust und einen sichereren Weg brauchst, Updates zu pushen, staged Rollouts zu steuern und dich schnell von Frontend-Problemen zu erholen, Capgo solltest du dir das ansehen.

Live-Updates für Capacitor-Apps

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

Neuestes aus unserem Blog

Capgo bietet dir die besten Insights für eine wirklich professionelle Mobile App.