Mobilne Aplikacje z React
5 godz. 51 min · React Native · Full-stack i Programowanie
Piotr SzacińskiZarówno iOS jak i Android posiadają swoje natywne SDK, do obsługi którego musimy poznać nowe języki - Swift czy Kotlin, o Objective-C czy Javie nie wspominając. Z kolei React Native jest do tego świetną alternatywą, która pozwala tworzyć jeden kod na obie platformy. Dodatkowo - bazuje na najpopularniejszym frameworku webowym, co znacząco zmniejsza próg wejścia.
Tak samo jak "czysty" React, React Native opiera się na komponentach. Poznasz ich specyfikę i nauczysz się poprawnie budować UI aplikacji. Zrozumiesz też jak najwydajniej zarządzać skomplikowanym layoutem, takim jak długie listy, i jak to wszystko łatwo stylować.
Animacje to nie tylko efekty przyjemne dla oka - to przede wszystkim dobry UX, który pozwala użytkownikowi odnaleźć się w aplikacji i zrozumieć jej mechanikę. Podczas kursu poznasz wszystkie podstawowe metody i koncepcje tworzenia animacji oraz poznasz sposoby optymalizacji ich działania. Dodatkowo omówimy prawidłowe podejście do dużo bardziej skomplikowanych interaktywnych animacji, przedstawimy ciekawe biblioteki oraz best-practices.
Praktycznie każda aplikacja, niezależnie od tego, czy web, czy mobile, składa się z wielu widoków i ekranów. Zarządzanie ścieżkami, jakimi użytkownik może się poruszać, to jedna z najważniejszych rzeczy - a w tym kursie dowiesz się jakich narzędzi należy używać i jak łatwo obsługiwać zagnieżdżone ekrany.
Niewątpliwym atutem aplikacji jest to, że może praktycznie bez ograniczeń przechowywać content w urządzeniu telefonu, a przez to - dostarczać treści niezależnie od dostępności internetu. Omówimy różne koncepcje zapisywania danych oraz poznamy metody i narzędzia do ich wdrażania.
Przybliżymy ci proces wypuszczania aplikacji "w świat" oraz przedstawimy narzędzia, z których sam autor korzysta do ułatwienia tego procesu.
Kurs jest dla każdego kto zna podstawy JavaScript oraz React i chciałby się rozwijać i tworzyć mega ciekawe projekty, które mogą używać aparatu czy sensorów smartfona.
0.62.2+
Na poprzedniej lekcji zrobiliśmy sobie naszą animację zaloopowaną
przy użyciu bibliotek animatable jest to bardzo fajna biblioteka
wyłączyłem sobie zakomentowałem sobie te nasze animacje z tego względu że w
trybie deweloperskim w debug mode
ona dość mocno obciąża komputer i z
tym mój macbook też głośno pracuje w związku z tym pozwoliłem sobie to wyłączyć
a ostatnią rzecz z animacji którą chciałbym poruszyć to są animacje interaktywne znaczy zauważcie że
w tej chwili te animacje były albo triggerowane przez lifecycle naszego
komponentu czyli na przykład na tak jak tutaj mamy po wejściu
ten ekran albo podczas montowania albo przez akcje uzytkownika
kliknięcia natomiast jest jeszcze mnóstwo cała gama animacji która jest wywoływana
w trakcie interakcji w trakcie gestu tak i to
jest troszkę temat bardziej zaawansowany natomiast też chciałbym żebyśmy liznęli tutaj
chociaż podstawową animacje w
właśnie taką interaktywną i żeby to zrobić skorzystamy sobie z naszej listy ponieważ zauważcie
że mamy tu już jakiś gest gest po prostu scrolla i to jest najprostszy gest na
jaki mogliśmy zacząć przejdźmy sobie do naszej listy
to list i teraz
każda lista czyli scroll view flat list zawiera
w sobie taką metodę on scroll która
nam zwraca event i wylogujmy sobie co mamy w tym evencie scroll
event event przepraszam
jedno
za dużo teraz powinno być
okej okej mój błąd
dobra dobra no i zobaczymy co tu się
będzie działo wyczyśćmy sobie logi tak jest i zobaczcie że
dostajemy jakiś event to jest trochę tak jak event który po prostu dosyajemy
z każdego z każdej takiej akcji użytkownika w tym evencie
mamy tak jakby jak native event zobaczmy
co on wyświetla i on
nam zwraca parę wartości odnośnie naszego scrolla ale najważniejszy z nich będzie nas teraz
interesować to jest content offset jak widać on ma w sobie wartość x y
z racji tego że nasz scroll jest wertykalny to nas będzie interesować y czyli wylogujmy
sobie content offset kropka y okej
no i widzimy że w trakcie scrollowania dostajemy pozycję naszego
scrolla możemy sobie włączyć ponieważ przy zbyt
częstym wywołaniu tego możemy gdzieś tam ten nasz logger go
zamulić w związku z tym możemy użyć takiej takiego propsu jak scroll event
throttle i to nam mówi o tym jak często możemy
dostawać te eventy możemy je throttle'owacć tak czyli jakby ograniczyć ich
triggerowanie na przykład możemy to zrobić ograniczyć do dwóch sekund i w tym
momencie jak będziemy animować to zauważcie że nie
częściej niż dwie sekundy będę dostawać ten scroll event żeby
zróbmy sobie tak o widzę że przez jedno
jedno l scroll no nieważne okej spróbujmy jakoś
reagować na tego scrolla zróbmy sobie nasz obiekt animated do animacji
załużmy że tutaj sobie będziemy trzymać zawiemy go
sobie scroll pos anim
żeby było wiadomo niech to będzie właśnie nas use ref new
animated kropka value
niech ma wartość 0 okej tyle to
nam się przyda za chwilę a zróbmy sobie co chcielibyśmy robić z tą animacją czyli fajnie
że coś tam się dzieje scrolluje no załużmy że chcielibyśmy animować nasz przycisk add żeby
w jakiś sposób on reagował na to na tego scrolla zwiększał się zmniejszał coś
takiego więc dodajmy sobie a przepraszam to tu sobie zostawmy dodajmy
sobie zróbmy interpolację czyli nazwijmy to nasz add button
scale i skorzystajmy z naszego scroll pos animation
current kropka interpolate jakie
to przyjmuje wartości początkowe no oczywiście od zera do no tak naprawdę do wielkości scrolla
żeby sobie nie utrudniać życia to wpiszmy tam po prostu 4000 albo
jeszcze 2000 i output range no
chciałbym żeby w momencie jak scroll jest zerowy to żeby to miało wartość na przykład 0.7
scrolla a w momencie jak jest wartość taka bardzo duża to żeby miał 1.2 okej
oczywiście musimy sobie stworzyć
nasz animated touchable
opacity animated kropka
no
okej udało
się nam chyba i dodajmy tutaj style
skorzystajmy sobie
z tego co zrobiliśmy profilu z takiej funkcji pomocniczej żeby nie brzydzić nam kodu
dokładnie z tej funkcji i
wsadźmy tutaj nasz add button scale
dobra zobaczmy co
się dzieje no teraz wiele się
nie dzieje bo nasz obiekt animacji scroll pos animation
nigdzie nie jest uzyty więc to co możemy zrobić tak w najprostszym przypadku to
po prostu w momencie tego scrolla to sobie ustawmy nazwijmy
to scroll pos to się równa możemy
po prostu animować do tej pozycji animated timing
naszą pozycję scroll pos animated
kropka current to value scroll pos
i
duration niech to na przykład niech to trwa 100 milisekund
start no dobra
no i zobaczmy co się dzieje config easing
is undefined co
tutaj zrobiliśmy nie tak okej może
ustawmy sobie na sztywno jakąś wartość
function coś coś coś głupiego zrobiłem
może nie zaimportowałem czegoś aha okej
z racji tego że bardzo częsty błąd z racji
tego że korzystamy z react native animated której powiem wam w następnej lekcji natomiast
tak jak wspominałem w nawigacji nasza nawigacja bazuje na tej bibliotece
i ta biblioteka tak naprawdę jest naprawdę potężną biblioteką
ja pokażę wam tylko tak mniej więcej jak
ona działa i co można z nią robić natomiast ona również zastępuje
w wielu miejscach naszą bibliotekę animated i tak na dobrą sprawę jak już ogarniemy bibliotekę
react native animated to nie musimy w ogóle korzystać z naszego api animated natomiast
animated obiekt tak samo jak w przypadku po prostu naszego react native
animated tak samo się nazywa w tej bibliotece i bardzo często jeśli wpiszemy
sobie animated to mamy tutaj auto generowanie importów zostanie to zimportowane
z tej biblioteki i ta biblioteka no jednak działa trochę inaczej w związku z tym
musimy sobie ten import wrzucić do react native'u a skąd to po prostu
wywalić i w tym momencie powinno być okej tak jest
co się tam działo ustawmy sobie to w ten sposób okej
no działa to tak sobie coś tam się dzieje jest
jako tako może zmniejszmy ten treshold
throttle przepraszam na na przykład 300 no
jakoś to tam w miarę daję radę ale
może zostawmy ustawmy ten threshold minimalny czyli zdaje się że na 16 i
po prostu zamiast animować ten obiekt
to ustawmy mu wartość przepraszam przycisk scroll
pos animation current kropka set
value scroll pos okej tak
naprawdę możemy to wywalić niech to będzie najmniejsze jakie jest możliwe okej
no i zobaczymy co się będzie działo no i fajnie
w sensie mamy naszą animację o to nam chodziło nie jest jakoś najbardziej rozbudowana
animacja na świecie ale mamy natomiast dochodzimy
do animacji i znowu najważniejsze pytanie czy używamy native drivera
no nie wiem tak bo mamy tu jakiś on scroll
event no chyba nie tak skoro nigdzie tego native drivera nie wpisaliśmy
tego nie używamy no bo ciężko żebyśmy w przypadku takiego callbacka
w którym dostajemy informację o evencie w jaki sposób wpisali tu parametr na
szczęście biblioteka animated pomaga ominąć
ten problem to znaczy możemy sobie naszego on scrolla
zamiast tworzyć naszą funkcję strzałkową to
możemy mapować wartości z tej funkcji
na wartości animowalne czyli możemy użyć czegoś tak jak
animated event a to przyjmuje tablicę której
podać jak chcemy co
chcemy mapować na co tutaj się posłużę taką małą pomocą bo
nigdy nie pamiętam struktury tego dokładnie okej czyli musimy najpierw użyć
sobie naszego native eventu w nim mamy zagnieżdżony content
offset w nim nas interesuje y
i chcemy to mapować na nasze scroll pos animation
okej sprawdźmy ale
jeszcze zanim to zrobimy to tutaj wydaje się że w drugim argumencie
tej funkcji możemy poprosić tak
jest możemy użyć parametru use native driver i on będzie nam
mapować te wartości ale już z uwzględnieniem native drivera czyli to tak naprawdę będzie
wysłane na stronę natywną i tam się będą działy cuda zobaczmy okej
to wynika z tego że jeśli chcemy mapować wartości przy uzyciu animated event
to nasza lista również musi być animowalna więc zróbmy sobie animated
kropka flat list wydaje mi się że animated ma taki komponent jak nie to
się go zaraz stworzy i zobaczmy o to ciekawe
zobaczmy
coś tutaj coś namieszałem native
event content offset scroll pos animation
dobrze usuńmy na razie sobie to i
wywalmy
sobie animację naszego buttona na
sekundkę żeby zdebugować w czym jest problem tak
tak nie możemy zrobić ten komentarz a tak
przepraszam okej
undefined is not an object okej
no to jest typowy błąd korzystamy z referencji więc muszę podać current dobra
też nie działa wróćmy sobie tutaj
zobaczymy czy to nam będzie działać okej no i super teraz a tylko wróćmy
skoro już nam to tutaj działa dajmy sobie drugi parametr uzyjmy
native drivera true przebudujmy
to i super nasza animacja
działa przy uzyciu native drivera jest fajnie tylko zauważcie jedną
rzecz ostatnią ja podałem wartości od 0.7 do 1.2 tak
czyli interesuje mnie scroll do 2000 natomiast no scrolluje dalej
i to ewidentnie jest więcej niż 1.2 to wynika z tego że nasza interpolacja jeśli wartość
wejściowa przekracza tą wartość wyjściową to ona będzie interpolować dalej czyli
przy założeniu że przy zerze mamy 0.7 przy 2000 mamy 1.2
no to gdzieś tam przy 4 tysiącach to będzie odpowiednio powiedzmy tam 1.8
czy coś takiego tak czyli będzie ta różnica dalej przeciągana
ale możemy sobie wykorzystać żeby to zmienić i do tego
służą wartości extrapolate czyli uzyjmy sobie
extrapolate right czyli interesuje mnie to co
się będzie działo w te stronę czyli jeśli wartość będzie większa od tej podanej
mamy tutaj parę opcji clamp extend i identity
identity no i sprawdźmy sobie jak to będzie działać z clampem jak
widać clamp powoduje że ta wartość nie zostanie przekroczona tak
czyli jeśli dochodzimy do wartości 2000 to
już więcej niż ten górna granica nie zostanie to przekroczone natomiast zobaczmy jak to wygląda
z lewej strony left jeśli damy extend
co jest domyślną wartością no to będzie się działo to co się dzieje czyli w momencie przekroczenia tej
wartości bo w tym momencie scroll jest na minusie oczywiście w androidzie tego nie zrobimy bo nie
mamy tego bounce backu który by nam pozwalał taką listę wyciągnąć
bardziej więc tutaj to nie będzie zauważalne na iOS-ie widać że ta wartość
jest jeszcze zmniejszana poniżej 0.7 a i to też się bardzo często przydaje
przy różnych różnych animacjach przy różnej interpolacji i w ogóle z mojego
doświadczenia dużo lepiej animować wartości na przykład od 0 do 1 a potem
używać interpolacji i już sobie zamieniać na te wartości które chcemy czyli gdzieś tam sobie tworzymy
animacje gdzieś tam je sobie uruchamiamy czy to właśnie przy pomocy właśnie animated
eventu a później finalnie rzutujemy mapujemy sobie te nasze wartości na to
co chcielibyśmy faktycznie osiągnąć i to jest całkiem spoko i generalnie jeśli chodzi
o animacje interaktywne to tyle w następnym rozdziale pokażę wam biblioteka właśnie react
native reanimated która jest bardzo zaawansowana ale
pokażę wam na różnych przykładach jak moglibyście z niej korzystać i co ona właściwie daje