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 poprzednich lekcjach zrobiliśmy sobie nasza listę zoptymalizowaliśmy ją a teraz
chciałbym zrobić coś troszeczkę innego ale coś co też może nam się przydać to
znaczy chciałbym żebyśmy w naszej aplikacji zagnieździli
sobie kod html bo bardzo często jest taki przypadek jest takie
wymaganie przykładem może być na przykład aplikacja z newsami bardzo
często ten content który dostajemy z backendu jest jakimś WYSIWYG-iem
albo po prostu linkiem no i musimy go jakoś zagnieździć no i teraz pokażę wam jak to
zrobić najłatwiej to z czego musimy skorzystać to
jest component web view z tym że w świecie React Native coraz
częściej te wszystkie komponenty te wszystkie biblioteki są odseparowywane od takiego
core'a i przez to musimy sobie to zainstalować z
osobnej paczki tak czyli mamy w react native community mamy nasz kkomponent react native webview
tutaj w na GitHubie mamy jego
całą dokumentację można sobie to przejrzeć musimy to sobie zainstalować istalujemy to
tutaj sobie zapisałem instalujemy sobie npm
install save react native web webview okej lecimy z tym okej i
tutaj jest mała dygresja ale bardzo istotna w przypadku pewnych pakietów
może się okazać że tak jak pokazywałem wam całą
strukturę zależności na naszym projekcie React Native'owym
androidowym i iOS-owym to projekty w iOS-ie mają to do siebie
że nie instalują się automatycznie to znaczy często po zainstalowaniu
takiego pakietu my musimy jeszcze doinstalować pakiety natywne
w przypadku androida dzieje się to automatycznie natomiast w przypadku iOS-a musimy to zrobić i wtedy wchodzimy sobie
do folderu cd znaczy folderu ios i tutaj wybieramy sobie
pod instal tego nie musimy robić jeśli mamy expo
ale właściwie wtedy tego nie jesteśmy w stanie zrobić bo nie mamy
tego folderu ios i nie mamy też tego problemu jak widać zainstalowała nam się paczka
natywna react native webview poczekamy aż to się wszystko
ładnie zainstaluję świetnie i dobrze w tym momencie przeinstalować
zbudować na przeinstalować właściwie zbudować na nowo nasz projekt piszemy sobie yarn ios
przy czym tak jak mówię ja startuję sobie yarn ios
startuję nam nasz metro bundler i przy okazji odpala apkę
ale tak naprawdę skoro bundler jest ten sam jego adres się nie zmienił to na androidzie też to
będzie działać ale cóż pewnie zauważyliście czyli niech nam się to zbuduję w tej chwili
could not connect to development server
niech to się nam ładuje a my w międzyczasie możemy sobie podziałać
czyli to co zrobimy to będzie nazwiemy to sobie Dynamic
i tutaj to wstawimy okej
zbudował się nasz projekt trochę to trwało ale mamy to co w tej chwili
w tej chwili musimy zaimportować sobie to nam nie będzie potrzebne musimy zaimportować
sobie nasze weby czyli robimy import WebView from
react native webview
i użyjemy go sobie tutaj ustawimy mu tak width 100%
height 100% okej
zobaczmy czy to działa w ogóle wygląda na to
że działa odpalmy sobie androida reload
być może musimy sobie zbudować
jeszcze raz projekt androida ale to na tej lekcji nie jest dla nas
aż tak potrzebne zostańmy sobie na razie przy tym iOS-ie okej czyli mamy nasze webview
jakoś tam działa znaczy nic się na razie nie dzieje więc to nie szkodzi żeby
działało ale tak zrobimy sobie jako nazwałem je Dynamic
z tego względu że chcemy żeby załadowało nam to jakieś jakiś
url z zewnątrz czyli na przykład a nich zrobimy sobie tutaj
stronę google.pl whatever
okej
i spróbujmy to sobie zreloadować okej
nic nam się nie dzieje spróbujemy
tak source i
teraz tak dodamy sobie możemy dodać sobie takie propsy
takie funkcje propsa które nam będą renderowały
dany komponent na przykład w momencie ładowania naszej
strony i tutaj sobie dodajmy bo widać że coś tam się ładuje ładowanie zobaczmy
czy to jest w ogóle widoczne okej
nie jest widoczne to wynika najprawdopodobniej z tego warto byłoby to opakować w coś
więc tak zróbmy bo nie zawsze to jest też częsty problem
React Native'a pewnych komponentów i trzeba je czasem opakować po prostu w
jakieś kontenery dla świętego spokoju z FlatListą
czasem bywa podobnie w pewnych sytuacjach więc dla spokoju można sobie to
po prostu opakować to sobie skopiujemy
i przynieśmy sobie tutaj i
opakujmy to wszystko w nasz kontener teraz
mi się wydaje że powinno być okej okej no i mamy naszą stronę google
zauważcie jedną rzecz że tak naprawdę w tej chwili zrobiliśmy aplikację hybrydową mamy
w pełni działającą aplikację stronę internetową w naszej w naszym webview i dokładnie
na tej samej zasadzie działają wszystkie narzędzia które tworzą nam aplikacje
hybrydowe odpalmy sobie jakąś inną stronę i proszę
bardzo mamy naszą stronę z jakimiś
newsami możemy sobie tutaj nawigować mamy
wszystkie informacje o widzę że mamy nawet reklamy tak więc dokładnie
na tej zasadzie tak jak mówiłem działają wszystkie mechanizmy które opakowują naszą stronę
internetową wewnątrz takiego webview czyli wszystkie Cordova'y Ionici
i tak dalej dokładnie to tak działa z tą różnicą że właściwie z tym dodatkiem
że komponent webview pozwala nam komunikować się z
zawartością tej strony to znaczy jesteśmy w stanie wysyłać
komunikaty właściwie wywoływać kod JS w tym by w tym zagnieżdżony
webview i otrzymywać informacje zwrotne i dlatego
w tych narzędziach do tworzenia aplikacji hybrydowych jesteśmy w stanie korzystać z natywnych
natywnych narzędzi z poziomu naszej strony ponieważ ta strona jest
w stanie komunikować się z tym jakby z całą aplikacją zanim
to jeszcze pokażemy to na przykład możemy dodać sobie kolejny propst
który nam będzie wyświetlał coś tam jak nastąpi błąd
ładowania strony na przykład wyświetlmy tu sobie
Error tutaj zmieńmy na Loading żeby już się trzymać konwencji
okej i na przykład coś tam jakieś głupoty wpiszemy i zobaczmy co sie stanie reload
jak widać no tutaj kwestia stylowania
błąd nam się wyświetlił więc widać że się nie udało załadować strony i
jeśli mamy bystre oko to zauważylibyśmy też że wyświetla nam się
nasze ładowanie a nie przepraszam nasze ładowanie nam sie nie wyświetla to jest trochę mało
intuicyjne natomiast żeby to się działo to najlepiej to inaczej trochę
działa na androidzie trochę inaczej na iOS-ie dobrze jest dodać taki parametr jak startInLoadingState
na true i to oznacza że w momencie kiedy rozpoczynamy ładowanie
a on na pewno nasz webview będzie w stanie loadingu co spowoduje
że ten loading na pewno się nam wyświetli na starcie zobaczmy mamy
loding i on znika dopiero teraz bo z punktu widzenia dopiero
teraz załadowało się wszystko w tym webview tak że można powiedzieć że ta strona nam się załadowała
jest to całkiem fajne i możemy jeszcze
sobie zobaczyć właśnie tak powiedzmy początkowe takie
ogólne elementy tej komunikacji między webview a naszą aplikacją i takim
pierwszą informacją jaką możemy zwrotną jaką możemy dostać z poziomu tej strony to jest to
gdzie jak wygląda nawigacja czyli on onShouldStartLoadWithRequest
i tu dostajemy informację od request i musimy zwrócić czy chcemy tą
stronę ładować czy nie zróbmy sobie coś takiego i wylogujmy sobie jaki
to jest request czyli webview request request
okej i zbudujmy
zobaczmy co
tu się dzieje i zobaczymy że tych requestów trochę jest głównie to będą requesty
na stronie głównej tak jest czyli widzimy że main Document ... no
i jakbym wyrażamy zgodę na to żeby ten i request został wykonany możemy
też zwrócić tutaj false w tym momencie nic nam się nie załaduje
cały czas bedzie loading dlatego że przy pierwszym możliwym request'cie właśnie
do wp.pl po prostu zostanie on odrzucony i
tutaj możemy sobie używać tego na przykład w sytuacji w której
zagnieździmy webview w naszej aplikacji na przykład jakąś stronę artykuł ale nie chcemy
żeby użytkownik mógł przejść do linków wewnątrz
tej aplikacji tak czyli nie chcemy żeby nie wiem żeby się dało przejść do
jakiejś tam podstrony konkretnej tutaj bo jak wyjdziemy sobie w jakąś podstronę
to zobaczymy że o że wchodzimy do main Document url to
jest wiadomości wp.pl coś tam coś tam coś tam tak więc moglibyśmy sobie tutaj spokojnie
dodać warunek że jeśli w tym request'cie ten main Document url to możemy
sobie to wylogować
main Document url i wyświetlmy sobie to tutaj wyczyśćmy
te logi przede wszystkim o widzimy że mamy wp.pl możemy
zrobić tak tak najprościej że jeśli nasz
jest różne od naszego
głównego adresu to return false
i w ten sposób będzie można chodzić
po stronie głównej wp.pl to powinno zadziałać jednak
to tak łatwo nie działa z tego względu że zapewne jakieś skrypty są doładowywane i bez nich się ta
strona nie uruchomi natomiast możemy
sobie zablokować na przykład zobaczmy co tu się dzieje
wiadomości wp czyli jeśli to
includes wiadomości to return
false zróbmy strona nam
się załadowała i co się dzieje a bo to jest money.pl
to niestety cofamy się jeszcze
raz tu gdzieś są wiadomości tak wyczyśćmy sobie logi
klikamy o i widzicie nie jesteśmy przekierowani
i to jest bardzo fajny feature który możemy wykorzystać właśnie w przypadku zagnieżdżania jakiś newsów
naszej aplikacji no i to jest super bo tak naprawdę możemy wykorzystać
naszą stronę którą mamy jakby modyfikując ją dokładnie to co robi
się w przypadku aplikacji hybrydowych tylko tak naprawdę jeśli znamy React Native'a
to nie mamy potrzeby opakowywania tego w jakiś czarodziejski sposób możemy sobie to tego
użyć w taki dokładnie tutaj z taką dodatkową
dodatkowym propsem ktory się mega może przydawać w przypadku takiej bardziej zaawansowanej komunikacji
na parametr jest props onMessage i tutaj to
jest każda informacja która zostanie nam zwrócona przez
przez jakby stronę z tą różnicą że w tym momencie raczej
tutaj nic nie zobaczymy bo nie prosimy o żadne informacje
zwrotną tak jest tutaj nic nic nic nie
dostaniemy natomiast przykładem kiedy moglibyśmy
tego użyć jest to na przykład jeśli chcielibyśmy żeby nasz view
który opakowuje ten kontener był dokładnie rozmiarów naszej strony
tak bo my sobie tutaj w tej stronie na tej stronie scrollujemy i chcielibyśmy żeby
żeby nasz kontener był dokładnie tej samej wysokości i
wtedy jesteśmy w stanie wysłać skrypt do naszego webview który w
onMessage zwróci nam informację o tym jaki jest jaki jest jaka
jest wysokość dokumentu no ale jakby tym się w tej chwili nie będziemy zajmować to już są ... natomiast takie rzeczy
można robić i przykład aplikacji w której to zostało użyteto właśnie była aplikacja newsowa w której ładowaliśmy
jakiś jakiś news jakiś artykuł i dopasowywaliśmy
wysokość naszych komponentów do wysokości webview i to
tyle jesli chodzi o lekcje z dynamicznym ładowaniem w następnej powiemy jeszcze sobie chwile o statycznym
czyli o ładowaniu kodu html