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+
Przerobiliśmy już sporo rzeczy w naszej aplikacji ale nie wspomnieliśmy o w sumie czymś
bardzo bardzo ważnym znaczy o naszym storage'u o pamięci to znaczy jedną
z najważniejszych rzeczy która spowodowała że aplikacje były tak użyteczne na
początku zwłaszcza było to że pozwalały nam na korzystanie
z rzeczy bez dostępu do internetu tak 10 12 lat temu nie
wszędzie internet był tak dobry nie wszędzie był tak szybki więc to że po pierwsze aplikacja
właśnie pamięta nasze urządzenie i nie mieliśmy za każdym razem wchodzić na stronę i pobierać na
nowo a po drugie to że ona sama sobie mogła trzymać dane było naprawdę czymś wielkim
i mimo tego że upływ czasu jest znaczący
i internet jest wszędzie dostępny to dalej jest wiele przypadków użycia w których
po prostu aplikacja powinna działać offline i takie podejście nazywa się
offline first czyli to jest taki dobry ux aplikacji nie
zawsze ma to zastosowanie bo są przypadki w których po prostu musimy mieć dane jakieś live
natomiast w wielu sytuacjach a nie wiem mamy na przykład mapy to
możliwość zapisania tych map albo trzymania wartości cache'owanych
jest naprawdę czymś co zmienia cały ux
tego podejścia i to podejście mega istotne i mega
ważne i tak naprawdę od niego powinniśmy zaczynać projektowanie naszej aplikacji czyli
nasza aplikacja czy jest scenariusz użycia w której nasza aplikacja mogłaby się przydać
użytkownikowi kiedy ten na przykład nie wiem byłby w garażu w parkingu gdzie
dostępu do internetu by nie miał przykład fajnego
zastosowania tego podejścia no to jest nie wiem mamy aplikacje z newsami okej newsy
pobieramy oczywiście z internetu natomiast jeśli włączymy aplikację to te ostatnie trzy
cztery newsy które mieliśmy plus może parę które gdzieś tam się doładowało moglibyśmy mieć zapisane
już na urządzeniu dzięki temu użytkownik po pierwsze nie czekałby na to aż pobiorą mu się
nowe artykuły a po drugie jakbym miał jakiś problem z internetem to
może te kilka na przykład w samolocie kilka pozostałych artykułów sobie przeczytać
nie musząc nigdzie klikać zapisz i tak dalej tylko po prostu nasza aplikacja zakłada że tak jest
no i taki schemat w bardzo dużym uproszczeniu wygląda w ten sposób że mamy
aplikację która po prostu się łączy z jakimś z jakąś grą i to jest okej gorzej
jak tego internetu tego dostępu tej
usługi bo też sama usługa może się coś nie ma no i wtedy jest klops bo tak naprawdę nasza aplikacja
jest bezużyteczna i takie podejście offline first zakłada właśnie
taki schemat to znaczy że nasza aplikacja nie łączy się bezpośrednio nigdy z usługami
zewnętrznymi takimi asynchronicznymi które mogą być niedostępne tylko zawsze to robi
przez naszą bazę danych lokalną ta baza danych oczywiście to duże słowo
a to może być w uproszczeniu po prostu jakiś json który jest gdzieś zapisywany natomiast
tak to taki schemat jest dużo lepszy bo nawet jeśli utracimy dostęp
tutaj do jakiejś usługi jakiegoś
internetu to ciągle aplikacja może korzystać z tych danych które już sobie kiedyś pobrała
i to jest bardzo fajne a i jest kilka podejść
kilka narzędzi które możemy używać w aplikacji żeby przybliżyć środkiem
schematu bo to jest oczywiście schemat idealny i takim pierwszym podejściem dość skomplikowanym i
dużym to jest po prostu skorzystanie postawienie sobie bazy sqlite lokalnie
na naszym urządzeniu ponieważ zarówno android jak i iOS wspiera sqlite
czyli taką prostą bazę sql z której możemy korzystać możemy wysyłać do niej
zapytania i wygląda to mniej więcej tak czyli tworzącymy
sobie jakąś tam bazę otwieramy ją mamy jakieś hasła pobieramy wiersze wykonujemy
to normalnym sql-em i to generalnie jest okej
natomiast jak ja bym miał się zastanowić tak rzeczywiście
kiedy to miałoby sens to może w całej swojej karierze 10-letniej
raz czy dwa faktycznie taka baza lokalnie miałaby sens jeden przypadek to był
taki gdzie aplikacja służyła
pracownikom w drodze na raportowanie
różnych rzeczy i tych raportów było całkiem sporo w jakichs sklepach różnych
magazynach i tam nie można było sobie pozwolić na to żeby czekać na synchronizację danych
i drugi to właśnie był typowo magazynowa aplikacja która trzymała
jakieś informacje trzeba je było synchronizować i tak dalej i też jakby operator nie miał możliwości zawsze
posiadania internetu więc tam tych rekordów było mnóstwo tak
bo naprawdę baza danych była cała baza praktycznie magazynu
była lokalnie postawiona i wtedy taki sql jest super bo jest wydajny
duży i się przydaje w przypadku naprawdę skomplikowanych operacji
natomiast mówię to są dwie aplikacje które gdzieś tam się przewinęły przez moją karierę
natomiast to też nie jest do końca fajnie to znaczy
ja jestem zwolennikiem zawsze wybierania chodzenia od góry jeśli
chodzi o powiedzmy techniczne aspekty to znaczy zaczynam od
najprostszego rozwiązania i ewentualnie schodzę niżej jeśli ono jest niewystarczające
więc jakby taki czysty sql może się okazać że nie jest nam potrzebny
mamy inne rozwiązania które są trochę bardziej abstrakcyjne i są bardziej przyjazne nam
jako programistom i przykładem takiego rozwiązania jest realm narzędzie które
jest bardzo dobrze mi znane z natywnego programowania aplikacji natomiast
ono też ma swoją wersję w react native i tutaj już
nie piszemy zapytań nie tworzymy obiektów typowo sql-owych tylko mamy na to nałożoną
pewną abstrakcje obiektową i korzysta
się z tego dużo fajniej natomiast pod spodem dalej mamy jakąś bazę sql-owo albo no sql-ową
w sumie nie wiemy ale nas to nie interesuje natomiast bardzo wydajną tak jesteśmy w stanie
również trzymać tutaj całkiem pokażne ilości danych a już jakby same
korzystanie jest dużo przyjemniejsze tak mamy tutaj możliwość na przykład pobrania
danych nie musimy tworzyć jakiegoś kodu sql do obsługi tego
tylko sobie po prostu pobieramy obiekty o danym typie z jakąś tam z
jakimś tam conditions czyli tutaj przykład age większy równy 17 możemy
sobie mamy transakcje zapisu mamy możliwość tworzenia tych obiektów to generalnie jest spoko
więc zamiast tworzyć takie brzydkie niskopoziomowe
sql-owe zapytania możemy korzystać z właśnie takich abstrakcji które nam realm nakłada czyli
na przykład zamiast po prostu selecta sql-owego
możemy stworzyć możemy pobierać dane na podstawie takiej konstrukcji bierzemy sobie
objecty danego typu i tutaj podajemy jakieś warunki czyli na przykład tutaj podaj
mi ludzi którzy mają więcej niż 17 lat na podstawie jakiegoś tam schematu transakcje
zapisu też są bardzo proste i takie no user-friendly programmer-friendly bo to właściwie
my z tego będziemy korzystać tworzenie obiektów to wszystko jest takie
no sql-owe ale fajne ale przy okazji szybkie
tak to znaczy naprawdę możemy tych rekordów mieć całkiem dużo i to będzie całkiem fajnie
działało więc jeśli mamy sytuację w której naprawdę trzymamy
pokaźny danych to taki realm może być naprawdę spoko musimy pamiętać o jednym
że zwłaszcza z mojego doświadczenia korzystałem z tego
w przypadku aplikacji natywnych na iOS-ie musimy bardzo mocno przestrzegać pewnych zasad które realm
na nas nakłada to nie jest tak że możemy sobie ot tak gdzieś tam
w pewnym miejscu korzystać z tego realma tylko jednak musimy przestrzegać tych zasad
bo realm ma jakieś wytyczne one są powiedzmy zrozumiałe
i jasne natomiast trzeba się ich trzymać bo inaczej możemy mieć spore problemy
niemniej jednak polecam jeśli już nie lubisz wybierać między sqlite
a takim realmem to zdecydowanie taki realm jest fajniejszy przechodząc
tak konkretnie do tego w jaki sposób się zazwyczaj pisze aplikacje
w react czy w react native no to bardzo często korzystamy z reduxa tak możemy oczywiście korzystać
z apollo on też ma swojego cache'a ale powiedzmy tutaj o reduxie jest coś takiego
jak redux persist widać że całkiem popularne narzędzie
i to mniej więcej sprawia że nasz store który trzymamy sobie w reduxie
w magiczny sposób jest zapisywany generalnie jeśli korzystamy z wielu typów
prostych to sprowadza się do tego że dodajemy takiego redux persistance i
persista i tyle i to po prostu działa czasem musimy sobie troszkę to
skonfigurować bo pewnych rzeczy nie da się tak jeden do jeden zapisać
natomiast kompletnie nie jest to żaden sposób skomplikowane i tutaj jest troszeczkę odwrotna
sytuacja niż do realma bo tutaj jest tak że korzystamy sobie z reduxa i to jakby ten redux
gdzieś tam wyznacza to w jaki sposób korzystamy trzymamy
nasze dane w aplikacji a ten persist tylko gdzieś tam pomaga nam je zapisywać offline
natomiast w przypadku realma jak móiwłem on nam narzuca pewne rzeczy i
taki redux persist korzysta z czegoś czego
o czym zaraz będziemy mówić a czyli z async storage to jest takie
narzędzie taka biblioteka react native która jeszcze do niedawna była
częścią core'a react native ale no z racji tego o czym mówiłem i tego
tej filozofii react native w którym coraz więcej rzeczy jest
odrzucana od tego core'a żeby był niezależnie rozwijany to tak samo ten async storage
jest wyrzucony do jako osobny projekt i
w tego async storage użyjemy w następnej lekcji do tego żeby zapisac
pewne dane w naszej aplikacji