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+
W ostatniej lekcji prawie rozwiązaliśmy nasz problem z klawiaturą
i z naszymi inputem to znaczy albo nam to działa na iOS-ie albo nam to działa
na androidzie czyli jeśli ustawimy sobie tutaj padding
to działa nam to fajnie na iOS-ie nie
do końca nam się da nie do końca nam to działa na androidzie natomiast jak ustawimy tu height
to jako
tako nam to działa na androidzie pewnie gdybyliśmy tutaj podziałali marginesem być może to przez ten pasek tutaj
który jest to nam się to nam przysłania ta klawiatura
natomiast no w tym momencie to w ogóle nie działa na iOS-ie jak
to zrobić no najpierw w ogóle dojdźmy do tego żeby to działało jakkolwiek na obu
miejscach a zaraz spróbuje zoptymalizować czyli mamy tutaj sytuację
w której coś ma trochę inaczej działać na iOS-ie na androidzie i troszeczkę inaczej
ma działać iOS-ie i możemy to zrobić na dwa sposoby pierwszy
sposób to jest korzystanie czegoś takiego z moduł jak Platform
taki moduł Platform ma
sobie kilka rzeczy czyli możemy od razu mamy zdefiniowane czy na przykład to jest
ipad czy to jest tv czy to jest tvOS jaka to jest wersja natomiast to co nas interesuje to
jest OS i teraz zróbmy sobie tutaj zróbmy
sobie takie taką taką zmienną którą nazwiemy sobie isAndroid która
będzie zawsze true dla androida okej
i w sytuacji w
której jesteśmy na androidzie zostawmy
to height bo to powiedzmy że w miarę działa a tu ustawmy padding
na wszelki wypadek przebudujmy tutaj
obie apki żeby było jasne zobaczmy super
na iOs-ie no i okej na androidzie w miarę
to działa myślę że moglibyśmy coś z tym podziałać żeby to działało lepiej natomiast
nie będziemy z tym nic robić bo wydaje mi się że lepszym rozwiązaniem
w tym przypadku jest prostu pozbycie się naszego KeyboardAvoidingView
z androida i teraz jak to robimy no
zrobimy to najpierw najprościej to znaczy zrobimy sobie tutaj komponent który nazwiemy
na przyklad ProfileContainer
i teraz jeśli to jest android
to niech nam tu zwróci
tutaj niech ma jakieś propsy to
niech nam tu zwróci fragment to
jest pusty tag czyli używamy tego w sytuacji w której musimy coś opakować ale
ale jakby nie nie view nie dodając
sobie niepotrzebnych zagnieżdzeń i zrobimy tu props.children
okej a w przeciwnym wypadku return
tak chcemy to opakować w
KeyboardAvoidingView i zrobić to samo
czyli props.children okej no
i zobaczmy czy to nam się uda zrobić czyli to
sobie usuwamy nie wiem czy mi sie to samo zaktualizowało
tak coś
jest nie tak wydaje mi się że musimy tutaj dodać nawiasy
nie on nam
to usuwa dobra żeby tutaj się nie zagłębiać w tym na razie to opakujmy to
po prostu View a oczywiście
to nie ma spread'a widzicie tak to jest jak się robi na
szybko reload okej i teraz co się dzieje na androidzie działa
na iOS-ie nie
działa czyli a nie
działa dlatego że nie mam ustawionego behavior chciałem ponarzekać na
to że źle coś zrobiłem ale nie jest aż tak źle zobaczmy teraz jest
super iOS działa android działa zreloadujmy
to żeby mieć pewność jest okej no
jest okej czyli teraz możemy usunąć to zostawić kontenery i to też powinno
już działać działa
działa a fajne jest to we flipperze
że możemy sobie to podejrzeć czyli mamy naszego iOS-a
sam nasz layout zauważcie przepraszam
tutaj to zrobimy zauważcie
że tu sobie odświeżmy tylko reload zróbmy że
mamy w naszej hierarchii KeyboardAvoidingView KeyboardAvoidingView okej tak
i to nam działa natomiast jeśli to samo zrobimy sobie na androidzie reload
żeby on nam pobrał wartość z tego to zauważcie że mamy SafeAreaView
i ProfileScreen czyli jest okej tak jakby zresztą widać że to działa ale ten
nasz mały hak ten nasz kontener rozwiązuje problem natomiast
to całkiem nieładnie wygląda że jest to tak tu wrzucone więc zróbmy
sobie osobny plik który nazwiemy ProfileContainer.js i
wyeksportujmy sobie to wszystko
żeby się tam nie bawić z tymi importami w tej chwili i zrobimy
export default ProfileContainer
no to narazie
to nam nie jest potrzebne a resztę możemy zostawić nic
nas te dodatkowe importy nie bolą okej możemy
już to wywalić i teraz oczywiście musimy
sobie zaimportować to ProfileContainer musimy zaimportować
nic się niestety samo nie zaimportowało ProfileContainer
from ProfileContainer przejdźmy
do logów przebudujmy to no
i zobaczmy jest okej jest okej no i w
sumie to załatwiło nam problem i tak naprawdę moglibyśmy to zostawić i zakończyć na tym natomiast
da się zrobić to chyba jeszcze trochę lepiej zwłaszcza w tym konkretnym przypadku
czyli jednym rozwiązaniem jakie właśnie tutaj przedstawiliśmy jest używanie
tego ifa natomiast ma to jeden problem to znaczy to się dzieje w runtime czyli
mimo tego że my tą wartość znamy od początku jakby uruchamienia
aplikacji nie zmieni nam się system trakcie działania aplikacji to
jednak całe te decyzje cały ten ten ten warunek który tutaj jest jest wywoływany
w trakcie runtime'u i teraz może być tak że będziemy
na androidzie korzystać z bibliotek które na przykład nie są dostępne na iOS-ie i odwrotnie i
wtedy to nam się może po prostu nie zbudować dlatego że nie
zbuduje nam się to na iOS-ie ponieważ nie będzie widział tych bibliotek albo
po prostu nie chcemy chcemy to zoptymalizować
żeby ten kod po prostu żeby tej ten warunek logiczny się w ogóle nie wykonywał
bo w sumie po co ma się wykonywać skoro on nigdy się nie zmieni i tutaj możemy
zrobić coś fajnego czyli drugi drugą metodę podziału plików względem
platformy i możemy sobie zrobić nowy plik który nazwiemy tak samo jak tamten poprzednim czyli ProfileContainer
i tutaj nazwać nazwę platformy czyli na przykład
możemy zrobić ios.js
i teraz zrobimy sobie dokładnie to samo z tą różnicą
że w iOS-ie będzie
nasz KeyboardContainingView to nam już nie jest potrzebne
a na androidzie już ten warunek też nam nie
jest potrzebny po prostu zwrócimy fragment z dziećmi
i teraz patrzcie co się dzieje przebudujemy sobie nasz projekt klikamy
nie działa klikamy działa czyli
jest prawie okej trzeba to zdebugować czemu tutaj nam to ProfileContainer
wiecie
co dla pewności że ja nic nie schrzaniłem ale nie upieram się że
nic nie schrzaniłem to sobie jeszcze raz odpalimy nasz projekt i
zobaczymy bo może z racji tego że ten plik został podzielony to musimy sobie to jeszcze
raz odpalić no wygląda wszystko okej dobra
zbudowało nam się to odpalmy
sobie jeszcze raz aplikację okej
okej działa nam czyli po prostu trzeba było rozbudować i zróbmy to samo jeszcze
z androidem TestProject
i działa nam to
na androidzie czyli tak jak pokazaliśmy są dwa rozwiązania
w jaki sposób możemy tworzyć platform przez flipper
i mi sie osobiście wydaje że to trochę zależy od przypadku w tym konkretnym takie
rozwiązanie jest fajniejsze bo jakby nie musimy się martwić tym żeby
ładować coś co nie będzie użyte żeby robić jakieś warunki które zawsze będą
true albo zawsze będą false na danej platformie więc w takim wypadku fajnie sobie użyć właśnie
podziału tych plików natomiast jeśli to są jakieś prostsze rzeczy
typu no nie wiem na androidzie chcielibyśmy troszeczkę inaczej coś wystylować albo
inaczej coś wyświetlić to wtedy sobie możemy użyć właśnie tego platforma os-a
i dodać sobie taki warunek is android czy tam is iOS
z tym działać no to tyle jeśli chodzi o tą krótką lekcję