Průvodci · 02
Web a React Native
Jeden import pro obě platformy. Metro vybere nativní implementaci a webové bundlery verzi pro DOM.
Stejný import
Nainstalujte jeden balíček a na obou platformách importujte z jeho kořene. React je jediná povinná peer závislost; React Native je volitelná peer pro nativní aplikace. Žádná platforma nepotřebuje provider, obal ani volání nastavení.
// 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} />
</>
);
}Jak se pohyb přehrává
Na webu se komponenty přehrávají přes Web Animations API s analyticky vzorkovanými pružinami, takže není potřeba načítat knihovnu animací a v žádném snímku neprobíhá render Reactu. V React Native komponenty používají Animated s nativním driverem pro transformace a opacity a driver JS jen tam, kde se mění rozvržení (šířka nebo výška).
| Část | Web | React Native |
|---|---|---|
| Transformace a opacity | Web Animations API | Animated, nativní driver |
| Šířka a výška | Web Animations API | Animated, driver JS |
| Streamovaný text | Plynule se objevující znaky, několik renderů Reactu za sekundu | Skutečný Text, bez prolnutí |
| Sheety a zoom | Nativní dialog v horní vrstvě | Průhledný Modal |
| Na pozadí | Ve skryté kartě se streamovaný text zobrazí najednou | Pohyb dosedne do koncového stavu |
Specifika React Native
API je stejné; toto jsou rozdíly, kterých si na zařízení všimnete.
- Čísla i streamovaný text zůstávají skutečným
Text, takže označování, zalamování,numberOfLinesi přístupnost fungují jako obvykle. MotionSheetaMotionZoomse renderují v průhlednémModala zavře je tlačítko zpět.- Vnitřní
ScrollViewv sheetu si zachovávají vlastní gesta; sheet se táhne za úchyt a pevné oblasti. MotionHoldpotvrdí přímo z akce přístupnosti aktivovat.- Inline
MotionSwapměří nový obsah na jednom řádku; pro obsah, který se zalamuje, použijteinline=—.
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še rozvržení zůstává vaše
Komponenty zachovávají vlastní rozvržení platformy: metriky textu, zalamování, škálování písma, omezení rodiče i vaše styly. Pohyb vašemu textu nikdy nevnutí šířku znaku, pevnou výšku ani ořezovou masku.
Co je ověřeno a kde
Chování na webu je ověřené ve skutečných prohlížečích. Chování v React Native pokrývají testy sdílených modelů a simulovaný renderer, proto před vydáním ověřte gesta a rozvržení na cílových zařízeních.