Liikettä React DOMille · React Nativen Animated API

Kirjoita liike kerran. Se kulkee sujuvasti eikä hajoa koskaan.

Animated tuo React Nativen Animatedin webiin. Yksi arvo ohjaa kuinka monta elementtiä tahansa ilman React-renderöintiä joka ruudussa, tuetun liikkeen toistaa selain itse, ja jokainen keskeytys jatkuu siitä, mitä näytöllä on.

Asennus
npm install @kkwaenggwari/animated

Yksi kelloarvo ohjaa kaikkien 64 muodon aaltoja. Liikuta osoitinta näyttämön yllä.

Mitattu tällä julkaisulla

Mitattu 1.0.0-koonnilla headless-Chromessa pöytä-PC:llä. Luvut riippuvat laitteesta. Miten mittasimme

  • 0.00msJavaScript ruutua kohden, kun 400 elementtiä liikkuu

    Äärellisen transform- ja opacity-liikkeen Animated-elementeissä toistaa selain. Sivun omat ruutucallbackit eivät tee mitään työtä.

  • 0.13msJavaScript ruutua kohden, kun yksi arvo ohjaa 10 000 elementtiä

    Arvo kirjoittaa yhden CSS-muuttujan; jokainen elementti johtaa siitä oman tyylinsä CSS:ssä.

  • 0React-renderöinnit liikkeen aikana

    Arvot eivät koskaan kulje Reactin tilan kautta. Komponentit renderöityvät, kun propsisi muuttuvat, eivät ruudun vaihtuessa.

01 · Yksinkertainen

API, jonka jo tunnet, tavallisessa React style -propissa

timing, spring, interpolate, loop ja Animated.event säilyttävät React Nativen nimet ja asetukset. Arvo menee suoraan tavalliseen style-propsiin, joten erityistä komponenttia ei tarvitse opetella ennen ensimmäistä liikettä.

  • Tuo React Native -koodi nimeämällä Animated.View muotoon Animated.div.
  • Yksi arvo voi liikuttaa samanaikaisesti nauhaa, kellotaulua ja korttiriviä, kutakin omalla alueellaan.
  • useAnimated omistaa reseptin: se käynnistyy kiinnitettäessä, käynnistyy uudelleen riippuvuuden muuttuessa ja siivoaa irrotettaessa.

Valmistellaan esimerkkiä…

Samat kutsut kuin React Nativessa

Spinner.jsx
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />

// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />

const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });

Animated.loop(
  Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();

02 · Nopea

Ei React-renderöintiä joka ruudussa

Hookin arvo on CSS-muuttuja. Lineaariset interpoloinnit ja aritmetiikka muuttuvat tämän muuttujan tarkoiksi calc()-lausekkeiksi, joten jokainen ruutu on yksi kirjoitus ja selain laskee loput. Äärellisen transform- ja opacity-liikkeen Animated.<tag>-elementeissä toistaa selain ilman ruutucallbackeja.

  • Muuta pisteiden määrää: laskuri näyttää, että React renderöi kerran muutosta kohden, ei koskaan ruutua kohden.
  • scope kirjoittaa arvon kerran säiliöön jokaisen elementin sijaan.
  • inspect(element) kertoo, mitä polkua kukin ominaisuus käyttää ja miksi.

Valmistellaan esimerkkiä…

03 · Vakaa

Keskeytä se missä vain. Se jatkaa.

Uusi kohde alkaa siitä, missä elementti on näytöllä, ja jousi säilyttää myös nopeuden, joten puolivälissä tapahtuva käännös kaartuu sujuvasti pysähtymättä ensin. Hookissa määritellyt ohjaimet pysähtyvät ja vapautetaan korvattaessa ja irrotettaessa, ja palvelimella renderöity markup jatkaa animointia hydraation jälkeen.

  • Napsauta kahdesti nopeasti: spring-asetuksella rata kaartuu, timing-asetuksella sijainti säilyy, mutta uusi käyrä alkaa.
  • Pysäyttäminen jättää arvon paikalleen; mikään ei hyppää lopputilaan.
  • Ei unohtuneita ruutusilmukoita irrottamisen, reitinvaihdon tai piilotetun välilehden jälkeen.

Valmistellaan esimerkkiä…

Rakennettu Animatedilla

Tarvitsetko valmiin komponentin? Animated Chorus.

Pyörivät numerot, siirtyvät korttikorostukset, edistyminen, sheetit ja animoidut listat, jotka liittyvät suoraan Reactiin ja React Nativeen. Nämä kolme toimivat juuri nyt tällä sivulla.

Tutustu Animated Chorus -sivustoon

Aloita kolmessa minuutissa

Asenna paketti, liikuta ensimmäistä arvoa ja valitse sitten opas edessäsi olevaan tehtävään.

npm install @kkwaenggwari/animated

Haku

Kirjoita hakeaksesi dokumentaatiosta.