Vodiči · 02
Web i React Native
Jedan import za obje platforme. Metro bira nativnu implementaciju, a web bundleri onu za DOM.
Isti import
Instalirajte jedan paket i uvozite iz njegova korijena na obje platforme. React je jedina obavezna peer ovisnost; React Native je neobavezna peer za nativne aplikacije. Nijedna platforma ne treba provider, omotač ni poziv za postavljanje.
// 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} />
</>
);
}Kako se pokret reproducira
Na webu se komponente reproduciraju preko Web Animations API-ja s analitički uzorkovanim oprugama, pa nema biblioteke animacija za učitavanje ni Reactova renderiranja u svakom kadru. U React Nativeu komponente koriste Animated s nativnim driverom za transformacije i opacity, a JS driver samo gdje se mijenja raspored (širina ili visina).
| Dio | Web | React Native |
|---|---|---|
| Transformacije i opacity | Web Animations API | Animated, nativni driver |
| Širina i visina | Web Animations API | Animated, JS driver |
| Tekst iz streama | Znakovi koji se postupno pojavljuju, nekoliko Reactovih renderiranja u sekundi | Pravi Text, bez prelijevanja |
| Sheetovi i zumiranje | Nativni dialog u gornjem sloju | Prozirni Modal |
| U pozadini | U skrivenoj kartici tekst iz streama prikazuje se odjednom | Pokret prelazi u završno stanje |
Posebnosti React Nativea
API je isti; ovo su razlike koje ćete primijetiti na uređaju.
- Brojevi i tekst iz streama ostaju pravi
Text, pa označavanje, prelamanje,numberOfLinesi pristupačnost rade kao i obično. MotionSheetiMotionZoomrenderiraju se u prozirnomModal, a zatvara ih gumb za natrag.- Unutarnji
ScrollViewu sheetu zadržavaju vlastite geste; sheet se povlači za ručku i statična područja. MotionHoldpotvrđuje izravno iz radnje aktivacije pristupačnosti.- Inline
MotionSwapmjeri novi sadržaj u jednom retku; za sadržaj koji se prelama koristiteinline=—.
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>
);
}Vaš raspored ostaje vaš
Komponente zadržavaju vlastiti raspored platforme: metrike teksta, prelamanje, skaliranje fonta, ograničenja roditelja i vaše stilove. Pokret vašem tekstu nikad ne nameće širinu znaka, fiksnu visinu ni masku obrezivanja.
Što je provjereno i gdje
Ponašanje na webu provjereno je u pravim preglednicima. Ponašanje u React Nativeu pokrivaju testovi zajedničkih modela i simulirani renderer, pa prije izdanja provjerite geste i raspored na ciljnim uređajima.