Oppaat · 02
Web ja React Native
Yksi import molemmille alustoille. Metro valitsee natiivitoteutuksen ja webin bundlerit DOM-toteutuksen.
Sama import
Asenna yksi paketti ja importtaa sen juuresta molemmilla alustoilla. React on ainoa pakollinen peer; React Native on valinnainen peer natiivisovelluksille. Kumpikaan alusta ei tarvitse provideria, käärettä eikä alustuskutsua.
// 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} />
</>
);
}Miten liike toistetaan
Webissä komponentit toistetaan Web Animations API:lla analyyttisesti näytteistetyillä jousilla, joten animaatiokirjastoa ei ladata eikä React-renderöintiä tehdä ruutua kohden. React Nativessa komponentit käyttävät Animated-moduulia natiivilla driverilla muunnoksiin ja peittävyyteen ja JS-driveria vain siellä, missä asettelu (leveys tai korkeus) muuttuu.
| Osa | Web | React Native |
|---|---|---|
| Muunnokset ja peittävyys | Web Animations API | Animated, natiivi driver |
| Leveys ja korkeus | Web Animations API | Animated, JS-driver |
| Virtaava teksti | Esiin häivytettävät merkit, muutama React-renderöinti sekunnissa | Oikea Text, ei häivytystä |
| Sheetit ja zoomaus | Natiivi dialog ylimmällä tasolla | Läpinäkyvä Modal |
| Tausta | Piilotetulla välilehdellä virtaava teksti näytetään kerralla | Liike asettuu lopputilaansa |
React Nativen erityispiirteet
API on sama; nämä ovat erot, jotka huomaat laitteella.
- Numerot ja virtaava teksti pysyvät oikeana
Text-elementtinä, joten valinta, rivitys,numberOfLinesja saavutettavuus toimivat tavalliseen tapaan. MotionSheetjaMotionZoomrenderöidään läpinäkyväänModal-elementtiin, ja takaisin-painike sulkee ne.- Sheetin sisemmät
ScrollView-elementit säilyttävät omat eleensä; sheetiä vedetään kahvasta ja staattisista alueista. MotionHoldvahvistaa suoraan saavutettavuuden aktivointitoiminnosta.- Inline-
MotionSwapmittaa uuden sisällön yhdellä rivillä; käytäinline=—rivittyvälle sisällölle.
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>
);
}Asettelusi pysyy sinun
Komponentit säilyttävät alustan oman asettelun: tekstin mitat, rivityksen, fonttiskaalauksen, vanhemman rajoitteet ja tyylisi. Liike ei koskaan pakota tekstiisi merkkileveyttä, kiinteää tekstikorkeutta tai rajausmaskia.
Mitä tarkistetaan missä
Webin toiminta tarkistetaan oikeissa selaimissa. React Nativen toiminta katetaan jaettujen mallien ja simuloidun renderöijän testeillä, joten tarkista eleet ja asettelu kohdelaitteillasi ennen julkaisua.