Panduan · 02
Web dan React Native
Satu impor untuk kedua platform. Metro memilih implementasi native dan bundler web memilih yang DOM.
Impor yang sama
Instal satu paket dan impor dari akarnya di kedua platform. React satu-satunya peer wajib; React Native adalah peer opsional untuk aplikasi native. Tidak ada platform yang memerlukan provider, pembungkus, atau panggilan penyiapan.
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';
export function Score({ points, players }) {
return (
<>
<MotionNumber value={points} />
<MotionList items={players} renderItem={(player) => player.name} />
</>
);
}Cara gerak diputar
Di web, komponen diputar dengan Web Animations API dengan pegas yang disampel secara analitis, jadi tidak ada pustaka animasi yang dimuat dan tidak ada render React per frame. Di React Native, komponen memakai Animated dengan driver native untuk transform dan opasitas, dan driver JS hanya bila tata letak (lebar atau tinggi) berubah.
| Bagian | Web | React Native |
|---|---|---|
| Transform dan opasitas | Web Animations API | Animated, driver native |
| Lebar dan tinggi | Web Animations API | Animated, driver JS |
| Teks mengalir | Karakter muncul perlahan, beberapa render React per detik | Text sungguhan, tanpa efek pudar |
| Sheet dan zoom | dialog native di top layer | Modal transparan |
| Latar belakang | Di tab tersembunyi, teks mengalir tampil sekaligus | Gerak langsung ke keadaan akhirnya |
Kekhususan React Native
API-nya sama; ini perbedaan yang akan Anda lihat di perangkat.
- Angka dan teks mengalir tetap
Textsungguhan, jadi pemilihan, pembungkusan baris,numberOfLines, dan aksesibilitas berperilaku seperti biasa. MotionSheetdanMotionZoomdirender dalamModaltransparan, dan tombol kembali menutupnya.ScrollViewdi dalam sheet mempertahankan gesturnya sendiri; sheet diseret dari pegangan dan area statisnya.MotionHoldlangsung mengonfirmasi dari aksi aksesibilitas activate.MotionSwapinline mengukur konten baru dalam satu baris; gunakaninline=—untuk konten yang membungkus.
import { Text, View } from 'react-native';
import { MotionNumber, MotionSheet } from '@kkwaenggwari/animated-chorus';
export function Wallet({ balance, open, setOpen }) {
return (
<View>
<MotionNumber
value={balance}
intl
locale="en-US"
format={{ style: 'currency', currency: 'USD' }}
/>
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.5, 0.9]}>
<Text>Recent activity</Text>
</MotionSheet>
</View>
);
}Tata letak Anda tetap milik Anda
Komponen mempertahankan tata letak bawaan platform: metrik teks, pembungkusan baris, penskalaan font, batasan induk, dan gaya Anda. Gerak tidak pernah memaksakan lebar karakter, tinggi teks tetap, atau masker pemotongan pada teks Anda.
Apa yang diverifikasi di mana
Perilaku web diverifikasi di browser sungguhan. Perilaku React Native dicakup oleh test model bersama dan renderer tiruan, jadi periksa gestur dan tata letak di perangkat target Anda sebelum rilis.