Saltare al contenuto principale
Logo di Capgo
Mobile Guida

Lottie React Native

La nostra guida completa ti insegna a utilizzare lottie react native. Copre Expo e workflow bare, controlli di animazione, ottimizzazione delle prestazioni e migliori pratiche per il 2026.

Lottie React Native

Probabilmente ti trovi in una delle due situazioni. O hai un designer che ti passa un Lottie JSON e ti chiede, “Possiamo introdurre questo nell'app di oggi?”, oppure hai già collegato tutto e hai notato che l'animazione funziona nel development ma inizia a sentire l'effetto una volta che i dispositivi reali, il tempo di avvio e le versioni di rilascio entrano in scena.

È in questo punto che Lottie React Native diventa interessante. La demo base è facile. L'implementazione pronta per la produzione non lo è. La differenza solitamente si riduce a come si installa, come si controlla la riproduzione e se si trattano i file di animazione come asset inoffensivi o come parte del tuo budget di prestazioni.

Indice dei contenuti

Perché Lottie è essenziale per gli App React Native

Se hai mai provato a ricreare un'animazione di prodotto raffinata a mano in React Native, già sai di cosa parliamo. I dettagli di movimento piccoli si trasformano in una pila di logica di timing, interpolazioni e bizzarrie di piattaforma. L'animazione può sembrare vicina, ma 'vicina' di solito non è ciò che il designer ha spedito.

Lottie ha cambiato quel workflow. Airbnb ha reso pubblico Lottie nel 2016, e quella rilascio ha cambiato l'animazione mobile permettendo ai designer di spedire animazioni direttamente invece di costringere gli ingegneri a ricostruirle frame per frame. In alcuni ambienti aziendali, quel cambiamento ha ridotto i costi di sviluppo di app mobili di 40% al massimo, according to L'overview di Lottie di Airbnb.

La progettazione e l'ingegneria smettono di combattere la stessa battaglia

Un beneficio chiave di Lottie React Native non è solo 'animazioni belle in JSON'. È la separazione delle preoccupazioni. I designer lavorano in After Effects e esportano con Bodymovin. Gli sviluppatori rendono l'output con riproduzione supportata nativamente invece di tradurre il movimento in code personalizzato

Perché conta: il lavoro di animazione ha l'abitudine di diffondersi. Una sola animazione celebrativa di stato può coinvolgere la revisione del design, la revisione del prodotto, il comportamento di Android, il comportamento di iOS, l'accessibilità e le prestazioni di avvio. Lottie riduce la superficie di lavoro.

Regola pratica: Usa Lottie quando l'animazione fa parte dell'esperienza del prodotto, non quando hai bisogno solo di una semplice opacità o di una transizione di traduzione.

C'è anche un aspetto di esperienza utente. La motion fornisce feedback, conferma le azioni e rende gli stati di caricamento sentiti meno morti. Se il tuo team sta pensando seriamente alla lustra, alla retenzione o alla fiducia nell'interfaccia, l'animazione fa parte di quella conversazione. La discussione più ampia sull'esperienza utente dell'app solitamente finisce nello stesso posto: il feedback veloce batte le schermate statiche.

Dove Lottie si inserisce meglio

Lottie React Native tende a funzionare meglio per:

  • Micro-interazioni personalizzate come likes, salvataggi, checkmark e stati di successo dell'acquisto
  • Illustrazioni di onboarding che devono sentire come personalizzate senza spedire video
  • Stati di caricamento e vuoto Dove la UI statica sembra incompleta
  • Educazione delle funzionalità Quando il prodotto vuole la movimento senza incorporare GIF o MP4

Non risolve ogni problema di animazione. Per le transizioni di schermo base, gli strumenti di animazione di React Native sono spesso più semplici. Per sistemi di movimento molto grandi o interattivi, il formato JSON può diventare un compromesso anziché un vantaggio. Questo compromesso diventa più importante non appena si raggiunge la produzione, che è dove la maggior parte dei tutorial si ferma troppo presto.

Configurazione dell'ambiente di sviluppo Lottie

La via di installazione dipende da una decisione iniziale: Flusso di lavoro gestito da Expo o React Native nudoNon mescolare i modelli mentali. La maggior parte dei problemi di configurazione si verifica quando gli sviluppatori seguono una guida di flusso nudo all'interno di Expo, o suppongono che Expo astragga ogni dettaglio nativo.

Un diagramma a flusso che mostra i passaggi di configurazione per le animazioni Lottie in progetti Expo e React Native nudi.

Scegli il flusso di lavoro prima di installare

Se il tuo app vive in Expo e vuoi la configurazione più veloce, rimani sulla via di Expo a meno che tu non sappia di aver bisogno di lavoro nativo personalizzato. Se sei in un'app nuda, o già dipendi da moduli nativi che richiedono controllo diretto, installalo come una dipendenza nativa normale e verifica entrambi i build iOS e Android immediatamente.

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 Flusso di lavoro di Expo development client Invece di aspettare che l'app diventi più difficile da modificare.

Setup di Expo gestito

Per le app gestite da Expo, mantieni le cose minimali.

  1. Installa il pacchetto

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

    npx expo start -c
  3. Verifica su dispositivo o simulatore Inizia con un file JSON locale e rendi un'animazione molto piccola per prima. Non debuggi un grande asset e un nuovo installamento allo stesso tempo.

A pochi appunti pratici importano in Expo:

  • Preferisci i file locali per prima: Il debug di animazioni remote aggiunge rumore di rete quando stai solo cercando di dimostrare che il library funziona.
  • Testa il comportamento della versione di testo. Lo stato di sviluppo può nascondere problemi legati all'orologio e alla prestazione.
  • Osservare le vie degli asset: I file JSON spostati sono una delle cause più comuni di

Esposo è la via più veloce per "funziona". Non significa che sia la via più veloce per "si scalano".

Expo è la strada più veloce per

Installare e verificare le dipendenze native fin da subito in un progetto nudo.

  1. Installa il pacchetto

    npm install lottie-react-native
  2. Setup React Native nudo

    cd ios && pod install && cd ..
  3. Riavvia l'app

    npx react-native run-ios

    or

    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.

Flussi di lavoro minimi che risparmiano tempo

Usa questo breve elenco di controlli prima di procedere:

Controlla Perché è importante
Riavvia dopo l'installazione I moduli nativi richiedono una compilazione fresca
Esegui pod install contesto: Il motivo per cui è essenziale per iOS
Usa un JSON locale semplice per primo Illega gli errori di installazione da quelli di asset
Testa entrambe le piattaforme in anticipo Android e iOS possono fallire per motivi diversi

Se il pacchetto si installa correttamente ma la tua prima animazione non si visualizza, non è di solito un problema di installazione. È di solito la directory degli asset, le dimensioni del componente o la configurazione di riproduzione.

Visualizzare la Prima Animazione Lottie

La prima animazione funzionante dovrebbe essere noiosa. File locale. Dimensione fissata. Riproduzione automatica. Ciclo facoltativo. Non iniziare con la riproduzione condizionale, JSON remoto o un'animazione di esportazione a strati pesantemente sovrapposti.

Un ambiente di lavoro moderno con un laptop che visualizza code e un monitor che mostra un'app di animazione mobile.

Aggiungi un file di animazione locale

Crea una cartella degli asset se non ne hai già una:

assets/
  animations/
    success.json

Mantieni i nomi semplici. Evita spazi, punteggiatura strana e cartelle con molti livelli di nesting. Vuoi require() che le directory rimangano chiare.

Se stai utilizzando Lottie per una schermata di caricamento iniziale o per un handoff dopo l'avvio, pensa attentamente prima di inserire un'animazione grande nella directory di avvio. È vero soprattutto quando stai anche regolando il comportamento della schermata di avvio di React Native Comportamento dello schermo di avvio di React Native.

Visualizza con LottieView

Crea un componente dedicato invece di inserirlo direttamente in un grande file di schermata:

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

That does three useful things:

  • Prova che la libreria si rende correttamente
  • Prova che la cartella degli asset si risolve correttamente
  • Ti da un posto isolato dove poter regolare la riproduzione e le dimensioni in seguito

Alcuni problemi si presentano immediatamente se si saltano i fondamentali:

  • Nessuna larghezza o altezza: L'animazione può esistere ma essere invisibile.
  • Cattivo require() percorso: Metro non trova il file.
  • Esportazione non valida: Alcuni file JSON sono tecnicamente validi ma includono funzionalità che non si comportano come previsto su mobile.

Conserva la prima renderizzazione locale e deterministica. Stai testando l'integrazione, non l'architettura.

Un test migliore della prima schermata

Collega il componente su una schermata semplice con un background neutro:

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

Se funziona in entrambi i simulatori iOS e Android, hai superato la prima vera difficoltà. Da lì, il prossimo passo non è aggiungere più animazioni. È imparare quando utilizzare proprietà dichiarative e quando prendere il controllo diretto con riferimenti.

Maestria dei Controlli di Animazione Lottie

La maggior parte dei bug di Lottie React Native si manifesta quando l'animazione deve reagire allo stato. L'autoriproduzione è facile. 'Riproduci questo segmento quando l'utente apprezza un oggetto, annulla quando non lo apprezza e non stutter quando il componente si ri-renderizza' è dove le cose si complicano.

Un confronto tra metodi di controllo animazione dichiarativo e imperativo in Lottie, con enfasi sui loro utilizzi specifici.

Usa proprietà quando la riproduzione è semplice

Per la riproduzione non interattiva, le proprietà sono sufficienti.

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

Questo stile è adatto per:

  • indicatori di caricamento
  • illustrazioni di onboarding passivo
  • Stati vuoti decorativi

E' dichiarativo e leggibile. Il componente si carica, la riproduzione inizia e React mantiene il controllo. Se la logica dell'animazione può essere descritta interamente da proprietà, lasciala lì.

Un caso dichiarativo più avanzato è progressquando si lega il frame dell'animazione ad un altro valore. Funziona bene quando il movimento deve riflettere una fonte di progresso esterna, ma è meno comodo per eventi di trigger unico.

Ecco un rapido confronto visivo prima di passare ai riferimenti:

Usa i riferimenti quando lo stato guida l'animazione

Quando l'utente clicca, attiva o completa un'azione, un riferimento è spesso lo strumento più sicuro. I dati reali mostrano 68% degli sviluppatori che utilizzano framework ibridi segnalano trigger di animazione falliti a causa di gestione di riferimenti non corretta in useEffect hookche è il motivo per cui modelli affidabili costruiti intorno animation.current.play() importano, come notato in questo Capacitor-focalizzato discorso sui fallimenti dei trigger.

Quel problema non è limitato agli app ibride. Si presenta anche in React Native puro, soprattutto quando gli sviluppatori ricreano i riferimenti, attivano la riproduzione prima del montaggio o legano le chiamate di animazione agli effetti instabili.

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 modello affidabile di like e unlike

Questo modello resiste meglio alla produzione rispetto a chiamare play() all'interno useEffect ogni volta che cambia lo stato.

Perché funziona:

  • L'evento possiede l'animazione di avvio: Un evento di pressione è un momento stabile per iniziare la riproduzione.
  • La ref rimane locale e persistente: useRef evita le rirerender non necessarie.
  • La componente evita i conflitti di autoplay: You don’t want mount behavior fighting user-triggered behavior.

Errori comuni da evitare:

  1. Attivare prima dell'esistenza della ref
    Se animationRef.current è nullo, la riproduzione non avverrà. Proteggielo.

  2. Utilizzare autoPlay con controlli imperativi
    Pick one default owner for playback.

  3. Far muovere tutto attraverso useEffect
    Effetti sono utili, ma per le azioni di interfaccia utente spesso aggiungono problemi di timing al posto di rimuoverli.

Se un'animazione risponde a un tocco, attivalo all'interno del gestore del tocco per primo. Cerca di useEffect solo quando la fonte di verità vive al di fuori di quella interazione.

Ottimizzazione della prestazione per le app di produzione

Lottie React Native è una di quelle librerie che sembrano leggere fino a quando gli squadre iniziano a caricare grandi file JSON nel bundle dell'app e si chiedono perché il caricamento è regressato. La strategia di consegna non è sempre il problema. L'animazione stessa non è sempre il problema.

Un infographic che evidenzia tre vantaggi chiave della regolazione delle prestazioni di Lottie: riduzione del peso del pacchetto, miglioramento dei tassi di frame e minor utilizzo della memoria.

Dove le squadre si fanno problemi

L'errore più facile è caricare ogni animazione direttamente nel JavaScript e caricarle tutte troppo presto. Secondo questa guida per l'invio di Lottie JSON in modo erratocaricare i file JSON di Lottie nei bundle JS può aumentare i tempi di caricamento dell'app di 40% o più su dispositivi di fascia mediae spostarli nei file nativi per il caricamento a richiesta è un'ottimizzazione critica.

Questo si allinea con ciò che molte squadre vedono nella pratica. Il problema non è un singolo animazione di successo minuscolo. È la pila:

  • moti di onboarding
  • stati di caricamento
  • reazioni di e-commerce
  • schermate vuote personalizzate
  • file di localizzazione e altri asset pesanti del pacchetto che li accompagnano

Se il tuo app già ha un problema di budget di avvio, i file Lottie possono peggiorare la situazione velocemente.

Cosa ottimizzare per primo

Inizia con l'esportazione stessa. Un'esportazione di animazione disordinata porta complessità che pagherai in seguito per la parsing, la memoria e la stabilità di rendering. Non accetta ogni esportazione del designer così com'è.

Utilizza questo elenco di controllo di produzione:

  • Comprimi il JSON prima di spedirlo: Il file più piccoli sono più facili da caricare e meno propensi a gonfiare l'avvio.
  • Sposta le animazioni non critiche fuori dal pacchetto JS: Tieni l'avvio code concentrato su ciò che l'app necessita immediatamente.
  • Carica le animazioni a richiesta: Rendere quando lo schermo o l'azione ne ha bisogno.
  • Verifica il comportamento degli dispositivi vecchi: Un simulatore moderno può nascondere una riproduzione costosa.
  • Evita l'uso di file Lottie grandi come decorazione di avvio: Se non è critico per l'interazione iniziale, non dovrebbe competere con l'avvio dell'app.

Per le squadre che lavorano sulle prestazioni mobili serie La guida di AppLighter alle prestazioni mobili è un utile accompagnamento da leggere perché mette le decisioni di animazione nel contesto più ampio di avvio dell'app, rendering e scelte relative al framework.

Una dura verità: Un'animazione bella che ritarda l'interazione iniziale è spesso un bug del prodotto, non un successo di design.

Pensate anche oltre React Native in isolamento. Le squadre che lavorano in stack ibridi incontrano problemi di caricamento di asset simili, e il contesto più ampio animation performance guidance for Capacitor apps A modern simulator can hide expensive playback.

File locali contro consegna remota

I file locali sono prevedibili. Funzionano offline, eliminano la variabilità di rete e sono più facili da testare. Sono anche facili da sovraccaricare.

La consegna remota mantiene il binario più leggero, ma ora il tuo animazione ha preoccupazioni di disponibilità, caching e fallback. Quel trade-off è accettabile per la non-critica del moto. È rischioso per gli stati UX primari come la conferma dell'acquisto o il successo dell'autenticazione.

Una suddivisione pratica funziona bene:

Tipo di risorsa Predefinito migliore
Animazione di interazione di base Localizzato, ottimizzato, non sovraccaricato
Animazione di moto promozionale occasionale Con consegna remota con fallback
Animazione del percorso di avvio Locale solo se assolutamente necessario
Rara illustrazione di una funzione non utilizzata Caricamento su richiesta

Se dovessi applicare solo una regola da questa sezione, utilizza questa: trattare i Lottie JSON come asset performanti, non come semplice decorazione..

Risoluzione dei Problemi Comuni di Lottie

Quando Lottie non funziona, la causa è spesso ordinaria. Percorso sbagliato. Dimensione mancante. Tempo di riferimento sbagliato. File JSON troppo pesante. La via più veloce per risolvere il problema è ridurre le variabili.

L'animazione non si visualizza su Android

Prima, assicurati che il file JSON sia risolto. Poi, assegna dimensioni esplicite al componente.

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

Se non funziona ancora, sostituisci l'animazione con un'altra nota buona. Ciò ti dice se il problema è il file o la configurazione.

La riproduzione è sgranata su dispositivi più vecchi

Questo solitamente indica l'asset, non il componente API.

Prova questi rimedi:

  • Riduci la complessità dell'animazione: Richiedi un esportazione leggera se il file di origine è pesante.
  • Carica più tardi: Non competere con il lavoro iniziale della schermata.
  • Prova una versione compressa: Se il file compresso funziona meglio, hai trovato il punto critico.
  • Rimuovi più viste Lottie contemporanee: Molte animazioni sullo stesso schermo possono essere troppo.

Più animazioni su una schermata possono essere troppo.

Riferimenti nulli solitamente indicano che il trigger si attiva prima della montatura, o che il componente è stato rimosso condizionalmente.

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

Mantieni stabile il riferimento con useRefE non ricreare il componente animato inutilmente. Se stai debuggando comportamenti strani ripetuti nei build locali, pulire i cache obsoleti può essere utile. Un semplice Ritorna alla cache Yarn routine di pulizia rimuovere il comportamento degli asset ingannevoli può essere sufficiente durante lo sviluppo.

L'animazione sembra sbagliata su diverse dimensioni dello schermo

Non lasciare che l'animazione definisca la disposizione. Mettilo all'interno di un contenitore e dimensionalo intenzionalmente.

  • Usa vincoli fissi per gli iconi e le reazioni
  • Usa wrapper consapevoli dell'aspetto per le illustrazioni più grandi
  • Evita di allungare fino a tutta la larghezza senza verificare la composizione esportata

La maggior parte dei rapporti "Lottie è rotto" si risolve in problemi di layout, problemi di asset o problemi di timing. La libreria sta spesso facendo esattamente ciò che hai chiesto.

If you need a final debugging shortcut, remove every advanced prop, render one local animation in a centered view, and build back up from there. That approach isolates problems faster than staring at a busy production screen.


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 è da considerare.

Aggiornamenti in tempo reale per Capacitor app

Quando un bug nel layer web è attivo, invia la correzione attraverso Capgo anziché aspettare giorni per l'approvazione della store. Gli utenti ricevono l'aggiornamento in background mentre le modifiche native rimangono nel normale percorso di revisione.

Sostegno umano da parte di Martin

Inizia subito

Ultimi articoli dal nostro Blog

Capgo vi offre le migliori informazioni che hai bisogno per creare un'app mobile davvero professionale.