Anda mungkin berada di salah satu dua tempat sekarang. Entah Anda memiliki seorang desainer yang memberikan Anda Lottie JSON dan bertanya, “Apakah kita bisa memasukkannya ke dalam aplikasi hari ini?”, atau Anda sudah menghubungkannya dan menyadari bahwa animasi berfungsi di pengembangan tetapi mulai terasa mahal ketika perangkat nyata, waktu startup, dan rilis masuk ke dalam gambaran.
Lottie React Native memang menarik di sini. Demo dasar mudah. Implementasi siap produksi bukanlah. Perbedaan biasanya bergantung pada cara Anda menginstalnya, cara Anda mengendalikan pemutaran, dan apakah Anda menganggap file animasi sebagai aset yang tidak berbahaya atau sebagai bagian dari anggaran kinerja Anda.
Daftar Isi
- Mengapa Lottie Penting untuk Aplikasi React Native
- Mengatur Lingkungan Pengembangan Lottie Anda
- Menampilkan Animasi Lottie Pertama Anda
- Penggunaan Kontrol Animasi Lottie yang Lebih Baik
- Pengaturan Kinerja untuk Aplikasi Produksi
- Penggunaan Umum untuk Masalah Lottie yang Sering Terjadi
Mengapa Lottie Esensial untuk Aplikasi React Native
Jika Anda pernah mencoba mereproduksi animasi produk yang rapi dengan tangan di React Native, Anda sudah tahu rasa sakitnya. Detail gerakan kecil berubah menjadi tumpukan logika waktu, interpolasi, dan kekacauan platform. Animasi mungkin terlihat dekat, tapi 'dekat' biasanya bukan apa yang desainer kirim.
Lottie mengubah alur kerja itu. Airbnb membuka sumber Lottie pada tahun 2016, dan rilis itu mengubah animasi mobile dengan memungkinkan desainer mengirim animasi langsung tanpa memaksa insinyur untuk merekonstruksi frame demi frame. Dalam beberapa pengaturan bisnis, perubahan itu mengurangi biaya pengembangan aplikasi mobile hingga 40%, menurut Ringkasan Lottie Airbnb.
Desain dan insinyur berhenti berperang di medan yang sama
Manfaat utama Lottie React Native bukan hanya 'animasi yang cantik dalam JSON.' Itu adalah pemisahan kepentingan. Desainer bekerja di After Effects dan mengexport dengan Bodymovin. Pengembang menampilkan hasilnya dengan pemutaran yang didukung oleh native tanpa menerjemahkan gerakan menjadi code yang khusus.
Itu penting karena pekerjaan animasi memiliki kebiasaan menyebar. Animasi perayaan tunggal dapat menyentuh tinjauan desain, tinjauan produk, perilaku Android, perilaku iOS, aksesibilitas, dan kinerja startup. Lottie mempersempit area permukaan itu.
Aturan praktis: Pakai Lottie ketika animasi adalah bagian dari pengalaman produk, bukan ketika Anda hanya membutuhkan transisi opacity atau translate yang sederhana.
Ada juga sudut pandang pengalaman pengguna. Gerakan memberikan feedback, mengkonfirmasi aksi, dan membuat status pengisian terasa kurang mati. Jika tim Anda berpikir serius tentang kilauan, retensi, atau kepercayaan pada antarmuka, animasi adalah bagian dari percakapan tersebut. Diskusi pengalaman pengguna aplikasi yang lebih luas biasanya berakhir di tempat yang sama: feedback cepat mengalahkan layar statis. Diskusi pengalaman pengguna aplikasi biasanya berakhir di tempat yang sama. Dimana Lottie paling cocok digunakan
Lottie React Native cenderung bekerja paling baik untuk:
Interaksi mikro yang terbrand
- seperti suka, menyimpan, tanda centang, dan status sukses pembelian Illustrasi onboarding
- yang perlu terasa kustom tanpa mengirim video Status pengisian dan kosong
- dimana UI statis terasa belum selesai Pendidikan fitur
- Pendidikan fitur ketika produk ingin gerakan tanpa mengintegrasikan GIFs atau MP4s
Apa yang tidak diatasi adalah setiap masalah animasi. Untuk transisi layar dasar, alat animasi React Native sendiri seringkali lebih sederhana. Untuk gerakan besar atau sangat interaktif, format JSON dapat menjadi pertukaran daripada keuntungan. Pertukaran ini menjadi lebih penting ketika Anda mencapai produksi, yang merupakan tempat kebanyakan tutorial berhenti terlalu awal.
Mengatur Lingkungan Pengembangan Lottie Anda
Jalur instalasi tergantung pada satu keputusan terlebih dahulu: Aliran Expo yang diatur atau React Native yang tidak diaturJangan campurkan model mental. Banyak masalah pengaturan terjadi ketika pengembang mengikuti panduan aliran yang tidak diatur di dalam Expo, atau menganggap Expo mengabstrak setiap detail native.

Pilih aliran sebelum Anda menginstal
Jika aplikasi Anda hidup di Expo dan Anda ingin setup yang paling cepat, tetaplah di jalur Expo kecuali Anda tahu Anda membutuhkan pekerjaan native yang kustom. Jika Anda dalam aplikasi yang tidak diatur, atau Anda sudah bergantung pada modul native yang membutuhkan kontrol langsung, instalnya sebagai dependensi native biasa dan validasi baik build iOS maupun Android segera.
Banyak tim menganggap bahwa debugging menjadi lebih mudah ketika setup Anda sejalan dengan jenis proyek. Itulah juga mengapa banyak tim yang membangun integrasi native kustom pindah ke aliran pengembangan klien Expo sebelumnya daripada menunggu sampai aplikasi menjadi sulit untuk diubah. Banyak tim menganggap bahwa debugging menjadi lebih mudah ketika setup Anda sejalan dengan jenis proyek. Itulah juga mengapa banyak tim yang membangun integrasi native kustom pindah ke aliran pengembangan klien Expo sebelumnya daripada menunggu sampai aplikasi menjadi sulit untuk diubah. Banyak tim menganggap bahwa debugging menjadi lebih mudah ketika setup Anda sejalan dengan jenis proyek. Itulah juga mengapa banyak tim yang membangun integrasi native kustom pindah ke aliran pengembangan klien Expo sebelumnya daripada menunggu sampai aplikasi menjadi sulit untuk diubah.
Konfigurasi Expo yang diatur oleh Expo
Untuk aplikasi Expo yang diatur oleh Expo, jadikan minimalis.
-
Instal paket
npx expo install lottie-react-native -
Mulai ulang Metro
npx expo start -c -
Verifikasi di perangkat atau simulator Mulai dengan file JSON lokal dan render animasi yang sangat kecil terlebih dahulu. Jangan debug aset besar dan instalasi baru secara bersamaan.
Catatan praktis beberapa hal yang penting dalam Expo:
- Lebih memilih file lokal terlebih dahulu: Pengujian animasi remote menambahkan kebisingan jaringan ketika Anda hanya mencoba membuktikan bahwa library tersebut berfungsi.
- Uji perilaku rilis awal: Pengaturan pengembangan dapat menyembunyikan masalah terkait waktu dan kinerja.
- Perhatikan jalur aset: Misplaced file JSON adalah salah satu penyebab paling umum 'tidak menampilkan apa-apa'.
Expo adalah rute tercepat ke 'berfungsi.' Tidak berarti itu adalah rute tercepat ke 'membesar.'
Bare React Native setup
Pada proyek sederhana, instal dan validasi dependensi native segera.
-
Instal paket
npm install lottie-react-native -
Instal pods iOS
cd ios && pod install && cd .. -
Rebuild aplikasi
npx react-native run-iosatau
npx react-native run-android
Bagian yang sering diabaikan oleh panduan cepat-start: setelah instalasi, lakukan rebuild native penuh sebelum memutuskan bahwa sesuatu rusak. Hot reload tidak akan menyelamatkan dependensi native yang belum dikompilasi dengan benar ke dalam aplikasi.
Bare workflow checks yang menghemat waktu
Pakai daftar checklist singkat ini sebelum melanjutkan:
| Periksa | Kenapa hal ini penting |
|---|---|
| Rebuild setelah install | Modul native memerlukan kompile ulang |
Jalankan pod install |
iOS tidak akan dapat diandalkan tanpa hal ini |
| Pertimbangkan menggunakan JSON lokal yang sederhana terlebih dahulu | Mengisolasi masalah install dari masalah asset |
| Uji keduanya sejak awal | Android dan iOS dapat gagal karena alasan yang berbeda |
Jika paket terinstal dengan bersih tetapi animasi pertama Anda tidak muncul, itu biasanya bukan masalah instalasi. Biasanya itu adalah path asset, ukuran komponen, atau pengaturan pemutaran.
Pertunjukan Animasi Lottie Pertama Anda
Animasi pertama yang berfungsi haruslah membosankan. File lokal. Ukuran tetap. Otomatis mainkan. Ulangi jika diinginkan. Jangan mulai dengan pemutaran kondisional, JSON remote, atau animasi export yang sangat berlapis.

Tambahkan file animasi lokal.
Buat folder asset jika Anda belum memiliki satu:
assets/
animations/
success.json
Pilih nama yang sederhana. Hindari spasi, tanda baca aneh, dan folder dengan banyak tingkat penyusunan. Anda ingin require() jalan menuju berkas tetap jelas.
Jika Anda menggunakan Lottie untuk layar muat awal yang dilengkapi dengan logo atau tindakan setelah peluncuran, pikirkan dengan hati-hati sebelum memasukkan animasi besar ke dalam jalur awal. Hal itu sangat benar terutama ketika Anda juga mengatur perilaku layar splash React Native. Tampilkan dengan LottieView..
Buat komponen khusus bukan langsung memasukkannya ke dalam file layar besar:
Ketiga hal yang berguna:
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,
},
});
menguji apakah library berfungsi dengan baik
- menguji apakah jalur berkas asset dapat diakses dengan benar
- __CAPGO_KEEP_0__
- Memberikan tempat yang terisolasi untuk menyesuaikan pemutaran dan ukuran kemudian.
Beberapa hal yang perlu diingat muncul jika Anda melewatkan dasar-dasar:
- Tidak ada lebar atau tinggi: Animasi dapat ada tetapi tidak terlihat.
- Sangat buruk.
require()Path: Metro tidak dapat menemukan file. - Ekspor tidak valid: Beberapa file JSON secara teknis valid tetapi termasuk fitur yang tidak berperilaku seperti yang diharapkan pada perangkat mobile.
Jagalah agar render pertama tetap lokal dan deterministik. Anda sedang menguji integrasi, bukan arsitektur.
Pengujian layar awal yang lebih baik
Tempatkan komponen pada layar sederhana dengan latar belakang netral:
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',
},
});
Jika ini berhasil di simulator iOS dan Android, Anda telah melewati hambatan pertama yang nyata. Dari sana, langkah berikutnya bukanlah menambahkan animasi lebih banyak. Itu adalah belajar kapan menggunakan deklarasi atribut dan kapan mengambil kendali langsung dengan refs.
Belajar Kontrol Animasi Lottie
Banyak bug Lottie React Native muncul ketika animasi perlu bereaksi terhadap keadaan. Otomatis memutar adalah mudah. 'Mainkan segment ini ketika pengguna menyukai item, balikkan ketika mereka tidak suka, dan jangan berhenti ketika komponen dirender ulang' adalah tempat yang berantakan.

Pakai atribut ketika pemutaran sederhana
Untuk pemutaran non-interaktif, atribut sudah cukup.
<LottieView
source={require('../assets/animations/loading.json')}
autoPlay
loop
speed={1}
/>
Stil ini baik untuk:
- indikator muatan
- illustrasi onboarding pasif
- status kosong dekoratif
Itu deklaratif dan mudah dibaca. Komponen terpasang, pemutaran dimulai, dan React tetap mengendalikan. Jika logika animasi dapat dijelaskan sepenuhnya oleh atribut, jangan pindah.
Contoh kasus deklaratif yang lebih maju adalah progressdimana Anda mengikat frame animasi ke nilai lain. Hal ini berfungsi baik ketika gerakan harus menunjukkan sumber kemajuan eksternal, tetapi kurang nyaman untuk kejadian trigger satu kali.
Berikut adalah perbandingan visual cepat sebelum kita melanjutkan ke refs:
Pakai refs ketika keadaan mengemudikan animasi.
Ketika pengguna mengetuk, mengaktifkan toggle, atau menyelesaikan aksi, refs biasanya alat yang lebih aman. Data nyata menunjukkan bahwa 68% pengembang menggunakan framework hybrid melaporkan gagal trigger animasi karena penanganan refs yang tidak tepat di hooks useEffect Masalah ini tidak hanya terjadi pada aplikasi hybrid. Hal ini juga muncul di React Native biasa, terutama ketika pengembang mereproduksi refs, memainkan playback sebelum mount, atau mengikat panggilan animasi ke efek yang tidak stabil.Polanya yang dapat diandalkan dan tidak disukai animation.current.play() Polanya ini lebih baik di produksi daripada memanggil Capacitor-fokus pembahasan gagal trigger.
Polanya ini lebih baik di produksi daripada memanggil
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>
);
}
__CAPGO_KEEP_0__-fokus pembahasan gagal trigger
Polanya ini lebih baik di produksi daripada memanggil play() di dalam useEffect setiap kali state berubah.
Mengapa ini berhasil:
- Event menguasai trigger animasi: Aksi tekan adalah saat yang stabil untuk memulai playback.
- Referensi tetap lokal dan persisten:
useRefmenghindari rerender yang tidak perlu. - Komponen menghindari konflik autoplay: Anda tidak ingin perilaku mount bertabrakan dengan perilaku yang dipicu pengguna.
Kesalahan umum yang perlu dihindari:
-
Mengaktifkan sebelum referensi ada
JikaanimationRef.currentJika itu null, maka pemutaran tidak akan terjadi. Jaga itu. -
Menggunakan
autoPlayDengan kontrol imperatif
Pilih satu pemilik default untuk pemutaran. -
Mendorong segalanya melalui
useEffect
Efek berguna, tetapi untuk aksi UI mereka sering menambahkan masalah waktu daripada menghilangkannya.
Jika animasi bereaksi terhadap sentuhan, maka triggerlah di dalam handler sentuhan terlebih dahulu. Cari
useEffectsaat sumber kebenaran hidup di luar interaksi tersebut.
Pengaturan Kinerja untuk Aplikasi Produksi
Lottie React Native adalah salah satu library yang terlihat ringan sampai tim mulai memasukkan file JSON besar ke dalam bundle aplikasi dan bertanya-tanya mengapa regresi startup terjadi. Animasi itu sendiri tidak selalu menjadi masalah. Strategi pengiriman adalah.

Dimana tim masuk ke dalam kesulitan
Kesalahan yang paling mudah adalah mengemas setiap animasi secara langsung ke JavaScript dan memuatnya semua terlalu awal. Menurut panduan ini tentang pengiriman Lottie JSON secara tidak tepat, mengalirkan bundle JS dengan aset seperti Lottie JSON dapat meningkatkan waktu mulai aplikasi oleh 40% atau lebih pada perangkat mid-range, dan memindahkannya ke aset native untuk penggunaan on-demand adalah optimasi kritis.
Hal itu sesuai dengan apa yang banyak tim lihat dalam praktek. Masalah bukanlah animasi kecil sukses tunggal. Itu adalah akumulasi:
- gerakan onboarding
- status loader
- reaksi e-commerce
- layar kosong yang diidentifikasi dengan merek
- file lokasi dan aset lain yang berat bundle yang duduk di samping mereka
Jika aplikasi Anda sudah memiliki masalah anggaran startup, file Lottie dapat membuatnya semakin buruk dengan cepat.
Apa yang harus diperbaiki terlebih dahulu
Mulai dengan ekspor itu sendiri. Ekspor animasi yang tidak rapi membawa kompleksitas yang akan membayar nanti dalam parsing, memori, dan stabilitas render. Jangan menerima setiap ekspor desainer sebagai-is.
Gunakan daftar checklist produksi ini:
- Kompress JSON sebelum mengirim: File yang lebih kecil lebih mudah dimuat dan kurang mungkin untuk memperbesar waktu startup.
- Pindahkan animasi non-kritis keluar dari bundle JS: Tetapkan code peluncuran fokus pada apa yang aplikasi butuhkan segera.
- Muat animasi pada permintaan: Render ketika layar atau aksi membutuhkannya.
- Audit perilaku perangkat lama: Simulator modern dapat menyembunyikan pemutaran yang mahal.
- Hindari menggunakan file Lottie besar sebagai dekorasi startup: Jika hal itu tidak kritis untuk interaksi pertama, maka tidak seharusnya bersaing dengan peluncuran aplikasi.
Untuk tim yang melakukan pekerjaan serius tentang kinerja mobile, Petunjuk AppLighter untuk kinerja mobile adalah bacaan teman yang berguna karena memasukkan keputusan animasi dalam konteks yang lebih besar dari peluncuran aplikasi, rendering, dan kelebihan-kekurangan framework.
Satu kebenaran yang sulit: Animasi yang indah yang menunda interaksi pertama biasanya adalah bug produk, bukan kemenangan desain.
Anda juga harus berpikir di luar React Native dalam isolasi. Tim yang bekerja dalam stack hybrid menghadapi masalah pengisian aset yang sama, dan panduan kinerja animasi yang lebih luas untuk aplikasi __CAPGO_KEEP_0__ animation performance guidance for Capacitor apps File lokal versus pengiriman jarak jauh
File lokal adalah prediktif. Mereka berfungsi secara offline, menghilangkan variabilitas jaringan, dan lebih mudah untuk diuji. Mereka juga mudah untuk di-over-bundel.
Pengiriman jarak jauh menjaga biner lebih tipis, tetapi sekarang animasi Anda memiliki kekhawatiran tentang ketersediaan, caching, dan fallback. Perubahan itu dapat diterima untuk gerakan non-kritis. Risikonya besar untuk status UX utama seperti konfirmasi pembelian atau kesuksesan autentikasi.
Untuk tim yang melakukan pekerjaan serius tentang kinerja mobile,
April praktis bekerja dengan baik:
| Jenis aset | Default yang lebih baik |
|---|---|
| Animasi interaksi inti | Optimasi lokal, tidak berlebihan |
| Motion promosi yang jarang | Jarak jauh dengan fallback |
| Animasi jalur startup | Hanya lokal jika benar-benar diperlukan |
| Illustrasi fitur yang jarang digunakan | Pemuatan pada permintaan |
Jika Anda hanya menerapkan satu aturan dari bagian ini, gunakan ini: perlakuan Lottie JSON sebagai asset yang sensitif terhadap kinerja, bukan dekorasi yang tidak berbahaya.
Troubleshooting Masalah Lottie Umum
Jika Lottie gagal, penyebabnya biasanya biasa saja. Jalur yang salah. Ukuran yang hilang. Waktu referensi yang salah. JSON yang berat. Cara tercepat untuk memperbaikinya adalah dengan mengurangi variabel.
Animasi tidak menampilkan pada Android
Pertama, pastikan file JSON dapat diakses. Kemudian berikan komponen dimensi yang eksplisit.
<LottieView
source={require('../assets/animations/success.json')}
autoPlay
style={{ width: 200, height: 200 }}
/>
Jika itu masih gagal, ganti dengan animasi yang sudah terbukti baik. Itu akan menunjukkan apakah masalah ada pada file atau pengaturan.
Reproduksi animasi bergoyang-goyang pada perangkat yang lebih tua
Biasanya ini menunjukkan pada asset, bukan komponen API.
Coba perbaiki dengan cara ini:
- Kurangi kompleksitas animasi: Tanyakan untuk ekspor yang lebih ringan jika file sumbernya berat.
- Muat nanti: Jangan bersaing dengan pekerjaan layar awal.
- Test versi kompresi: Jika file kompresi berperilaku lebih baik, Anda telah menemukan botol leher.
- Hapus beberapa Lottie view sekaligus: Beberapa animasi di satu layar dapat terlalu banyak.
Referensi null atau play tidak melakukan apa-apa
Referensi null biasanya berarti trigger meledak sebelum mount, atau komponen dihapus secara kondisional.
if (animationRef.current) {
animationRef.current.play();
}
Tetapkan referensi stabil dengan useRefdan jangan menciptakan komponen animasi secara tidak perlu. Jika Anda sedang debugging kesulitan aneh yang berulang dalam build lokal, membersihkan cache yang sudah ketinggalan dapat membantu. Cara sederhana rutinitas pembersihan cache Yarn kadang-kadang cukup untuk menghilangkan perilaku aset yang menipu selama pengembangan.
Animasi terlihat salah di berbagai ukuran layar
Jangan biarkan animasi menentukan tata letak. Masukkan animasi ke dalam kontainer dan ukur secara sengaja.
- Gunakan batasan tetap untuk ikon dan reaksi.
- Gunakan pembungkus yang sadar aspek untuk ilustrasi yang lebih besar.
- Hindari meregangkan ke lebar penuh tanpa memeriksa komposisi ekspor yang dimaksudkan.
Banyak laporan "Lottie rusak" berakhir menjadi masalah tata letak, masalah aset, atau masalah waktu. Perpustakaan sering melakukan apa yang Anda minta.
Jika Anda membutuhkan shortcut debugging akhir, hapus setiap properti yang canggih, render animasi lokal satu di dalam tampilan yang berpusat, dan bangun kembali dari sana. Pendekatan tersebut memisahkan masalah lebih cepat daripada menatap layar produksi yang sibuk.
Capgo membantu tim mengirimkan perbaikan JavaScript, aset, dan konfigurasi ke Capacitor tanpa menunggu tinjauan toko. Jika Anda menjaga aplikasi hybrid dan membutuhkan cara yang lebih aman untuk memasang pembaruan, mengelola peluncuran yang dipersiapkan, dan pulih dengan cepat dari masalah depan-end, Capgo patut dipertimbangkan.