Ruch dla React DOM · API Animated z React Native

Napisz ruch raz. Działa płynnie i nigdy się nie psuje.

Animated przenosi Animated z React Native do sieci. Jedna wartość steruje dowolną liczbą elementów bez renderu React w każdej klatce, obsługiwany ruch odtwarza sama przeglądarka, a każde przerwanie kontynuuje od tego, co na ekranie.

Instalacja
npm install @kkwaenggwari/animated

Jedna wartość zegara steruje falowaniem wszystkich 64 kształtów. Przesuń wskaźnik nad sceną.

Zmierzone w tym wydaniu

Zmierzone na buildzie 1.0.0 w Chrome bez interfejsu na stacjonarnym PC. Liczby zależą od urządzenia. Jak mierzyliśmy

  • 0.00msJavaScript na klatkę, gdy porusza się 400 elementów

    Skończony ruch transform i opacity na elementach Animated odtwarza przeglądarka. Własne callbacki klatek strony nie wykonują żadnej pracy.

  • 0.13msJavaScript na klatkę, gdy jedna wartość steruje 10 000 elementów

    Wartość zapisuje jedną zmienną CSS; każdy element wyprowadza z niej swój styl w CSS.

  • 0Renderowania React w trakcie ruchu

    Wartości nigdy nie przechodzą przez stan React. Komponenty renderują się, gdy zmieniają się twoje props, a nie gdy zmienia się klatka.

01 · Prosto

API, które już znasz, na zwykłym style React

timing, spring, interpolate, loop i Animated.event zachowują nazwy i konfiguracje z React Native. Wartość trafia prosto do zwykłego propa style, więc przed pierwszym ruchem nie trzeba poznawać żadnego specjalnego komponentu.

  • Przenieś kod z React Native, zmieniając nazwę Animated.View na Animated.div.
  • Jedna wartość może naraz poruszać paskiem, tarczą i rzędem kart, każdym z własnym zakresem.
  • useAnimated posiada przepis: startuje przy montażu, startuje ponownie, gdy zmienia się zależność, i sprząta przy odmontowaniu.

Przygotowywanie przykładu…

Te same wywołania co w React Native

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 · Szybko

Bez renderu React w każdej klatce

Wartość hooka to zmienna CSS. Interpolacje liniowe i arytmetyka stają się dokładnymi wyrażeniami calc() tej zmiennej, więc każda klatka to jeden zapis, a resztę wylicza przeglądarka. Skończony ruch transform i opacity na elementach Animated.<tag> odtwarza przeglądarka bez callbacków klatek.

  • Zmień liczbę kropek: licznik pokazuje, że React wyrenderował raz na zmianę, nigdy na klatkę.
  • scope zapisuje wartość raz w kontenerze zamiast w każdym elemencie.
  • inspect(element) mówi, której ścieżki używa każda właściwość i dlaczego.

Przygotowywanie przykładu…

03 · Stabilnie

Przerwij w dowolnym miejscu. Ruch trwa dalej.

Nowy cel zaczyna od miejsca, w którym element jest na ekranie, a sprężyna zachowuje też prędkość, więc zawrócenie w połowie drogi jest płynne zamiast najpierw się zatrzymywać. Kontrolery zadeklarowane w hooku są zatrzymywane i zwalniane przy zastąpieniu i odmontowaniu, a znaczniki wyrenderowane na serwerze animują się dalej po hydratacji.

  • Kliknij dwa razy szybko: przy spring tor się wygina, przy timing pozycja zostaje, ale zaczyna się nowa krzywa.
  • Zatrzymanie zostawia wartość tam, gdzie jest; nic nie skacze do stanu końcowego.
  • Żadnych zapomnianych pętli klatek po odmontowaniu, zmianie trasy czy ukryciu karty.

Przygotowywanie przykładu…

Zbudowane na Animated

Potrzebujesz gotowego komponentu? Animated Chorus.

Przewijane liczby, wędrujące wyróżnienia kart, postęp, arkusze i animowane listy, które od razu działają w React i React Native. Te trzy działają właśnie teraz na tej stronie.

Odwiedź Animated Chorus

Zacznij w trzy minuty

Zainstaluj pakiet, porusz pierwszą wartość, a potem wybierz przewodnik do zadania, które masz przed sobą.

npm install @kkwaenggwari/animated

Szukaj

Zacznij pisać, aby przeszukać dokumentację.