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+
To w poprzednich lekcjach zrobiliśmy sobie całkiem fajny i użyteczny profili rozwiązaliśmy
parę problemów które mieliśmy tutaj choćby z klawiaturą stworzyliśmy
sobie Platform Specific Code super natomiast
chciałbym się teraz zająć czymś troszkę bardziej skomplikowanym otóż listami zapewne
jesteście użytkownikami smartfonów i zauważyliście że tak
naprawdę większość aplikacji to są bardzo długie listy przykład facebook Youwall instagram
i tego typu aplikacje wszędzie tam przewijają się listy i w
aplikacjach natywnych w systemach natywnych już od pierwszych
wersji wsparcie dla takich list było bardzo dobrze wspierane znaczy rozwiązania
były bardzo bardzo dobrze zrobione tak żeby te listy działały całkiem
spoko kiedy teraz patrzymy na to wszystko to może
nie widać aż tak bardzo ale jak odpalimy to sobie na starym iphone na przykład ja posiadam iphone'a 3g
i zobaczymy jak wygląda lista w przeglądarce jakaś
długa versus lista w aplikacji to widać diametralną różnicę
zaraz pokażę wam dokładnie o co chodzi żeby to zademonstrować w jakimś
stopniu no to musimy zrobić sobie jakąś listę no i najprostszym rozwiązaniem będzie zrobić
po prostu listę Todo którzy wszyscy wszędzie robią ale uważam
że na start to będzie super no i zaczniemy sobie od zrobienia
jakiegoś komponentu swoją drogą cofnę się tutaj to też nie jest związane
stricte z naszym kursem natomiast jako korzystacie z VS Code'a
czy jakiegokolwiek z innego edytora to mega polecam tworzenie snippetów
snippety to jest takie narzędzie które pozwala nam poprzez taki skrót tworzyć sobie własny
kod i jest to super fajne bo oszczędza nam mnóstwo czasu ja
mam tych snippetów trochę porobione na przykład do testów mam jakieś
tam przygotowane template'y jeśli chciałbym testować komponent testować hooks czy
cokolwiek takiego tak więc taka taka mała dygresja dobra
lecimy z tym komponentem a nazwijy ją sobie TodoLlist zapisz
to nie TypeScript znowu tutaj kolejna
mała dygresja ja korzystam z TypeScripta i zachęcam was do korzystania z TypeScripta ale
nie uznałem że nie będę w konkursie tego poruszać bo to trochę nie jest związane
z tematem natomiast warto warto od samego początku w
tego TypeScripta iść okej i teraz zamiast
naszego profilu na kóry na chwilę pominiemy to dodamy sobie naszą Todo listę
fajnie że nam sie zaimportowało i zobaczmy co się dzieje
świetnie stało się nicość czarność bo nic na tej liście nie mamy
to co chcielibyśmy mieć to
może na przykład ekran biały to już zawsze sprawi że będzie fajniej dobra mamy
coś takiego i od czego zacząć no chciałbym
przede wszystkim mieć listę czegoś nazwijmy to taski tasks
setTasks useState
i na początku niech tam będzie
task1 other task something
whatever okej no i
chciałbym mieć możliwość dodawania tych tasków więc zrobimy sobie
troszeczkę tutaj logiki UI
czyli tak zaczniemy od zrobienia jakiegoś pola tekstowego do wpisania
takiego nowego taska więc nazwiemy to sobie TaskText Input
nie zaimportowało nam się to już dodajemy świetnie
to co mam będzie potrzebne to jest na pewno jeszcze AddTaskButton
styled
TouchableOpacity
i oczywiście AddTaskButtonText
no i tutaj też musimy sobie zaimportować okej
i tak tu zrobimy sobie color white tu
zrobimy sobie background color
blue damy width 100 procent
height 50px justify center
align-items center i jeszcze
sobie owrapujemy tą nazwijmy to Header na przykład
Header
i na razie nic z tym nie robimy więc zaczynamy od wprowadzenia naszego Headera
Header nie Headers tutaj dodamy
nasz TaskTextInput
a tutaj
dodamy AddTaskButton no i
tu dodamy AddTaskButtonText którym będzie ADD
no i zobaczmy co tutaj się wydarzyło okej coś tam jest pierwszy
problem SafeArea więc dajmy
sobie tutaj SafeAreaView pewnie to powinno
znajdować się w naszym App.js-ie a nie tutaj ale na
razie możemy tak zostawić to nie jest żeden problem coś
tutaj nie siadło załadujemy to jeszcze raz
okej
bo czyli jest okej tylko po prostu dodałbym background color
tego Headera żebyśmy widzieli w ogóle czyli na przykład eeeeee okej
czyli to nie wystaję tylko po prostu ten TextInput nie ma wysokości coś tu zmieniamy na przykład 50 pixeli świetnie
padding 8 pixeli dobra
i dodamy jeszcze placeholder new
task nie czemu z wielkiej litery niech będzie z małej okej
jakoś jest lepiej lub gorzej ale coś tam jest świetnie dodamy
sobie obsługę tego buttona i w ogóle tego pola tekstowego
to tak to to niestety taki musimy troszeczkę tego boilerplate'u narobić ale
żeby miało to sens to tak będzie lepiej
oj przepraszam i wyświetlmy sobie to czyli value
to się równa
onChangeText to się równa
setCurrentText i dodajmy sobie
function onAddTask if currrentText
length mniejsze od 3 return
i tutaj sobie dodamy tego taska onPress
to się równa onAddTask tak naprawdę to co w tej chwili robimy to jest
ta sama logika korzystamy z buttonów takich skrutów z których korzystaliśmy w tamtej
lekcji okej i chyba tyle
natomiast teraz chcielibyśmy dodać wyświetlić
nasze elementy więc to co zrobimy to nazwiemy to sobie
ListsWrapper żeby tam jakoś ładniej się to nam prezentowało
dobra bym
tutaj jest ListWrapper i w tym miejscu wyświetlimy
sobie wszystkie nasze elementy czyli
tasks.map t i na przykład
wyświetlmy narazie taki po prostu zwykły tekst niech to będzie tutaj fajnie
coś tam się wyświetla mamy naszą jakąś tam listę jeśli
ja dodam coś tam to nic się nie dzieje ciekawe
nic się dzieje bo nic nie dodajemy setTask
dodajmy nasze tasks
i dodajmy currentText i oczywiście
setCurrentText zostawmy puste no i teraz
już to powinno wyglądać trochę lepiej okej coś tam się dzieje coś dodajemy to już nie musimy przykrywać
tej klawiatury mamy tą liste czyli mamy taką podstawową listę z
jakimiś elementami natomiast nie wygląda to najlepiej więc dodajmy sobie jakiś
element to nazwijmy ListItem w
której będzie będziemy który będzie tym itemem
który będzie wyświetlał ten element listy on w propsach
będzie dostawać cokolwiek info niech to się nazywa
InfoText no i niech to po prostu będzie duże
20 pixeli color niech będzie
gray to damy jeszcze justify-content center
align-items center już
prawie dochodzimy do do tej faktycznej listy tylko jeszcze tutaj
to poprawmy dajmy tu InfoText
bez tego info okej no
i teraz w tym miejscu zamiast czegoś takiego
to dodamy ListItem info
to się równa nasze t działa no
prawie tak nie chcemy żeby to miało wysokość 100 chcemy
żeby to miało wysokość no 80 pixeli okej
i dodajmy jakiś magines bo gdzieś tam się gubią te elementy 10 pixeli
okej mamy naszą listę no
i dodawajmy zobaczmy czy na androidzie też działa jest na androidzie tak jakoś
mniej acha no tak bo ocywiście nie dodaliśmy na androidzie żadnej dodajmy
new coś tam something coś
tam bla bla bla bla bla bla bla no
i fajnie tylko jak widzicie problem jest taki że teraz tej listy
nie możemy scrollować bo domyślnie nawet jak te elementy wykraczają
poza te dzieci tego elementy wykraczają poza rodzica to
nie ma takiej opcji żeby tam przewinąć i to w jakiś sposób przescrollować tak jak to może być domyślne
w przeglądarce jeśli po prostu jakiś element jest większy co możemy w tej chwili zrobić
w tej chwili musimy użyć właśnie naszego naszego
komponentu ScrollView czyli
zrobimy sobie tutaj const nazwijmy to List
bo będzie to forma listy ScrollView
musimy to oczywiście zaimportować i
tutaj opakujmy to w listę okej
i co się teraz dzieje jak widzicie teraz możemy
sobie tą listę scrollować z tą różnicą że widzicie tutaj ten ostatni element gdzieś nam
wyjeżdża to wynika z tego że ta lista nie ma ustawionej wysokości ten Wrapper
nie ma ustawionej wysokości więc pewnie próbuje po prostu
się dopasować do wysokości dzieci ale jeśli mu ustawimy flex 1 to
powinno być okej to powinien się dopasować do dokładnie tak do
tego co mamy widoczne sprawdźmy czy na androidzie też to działa okej coś
tam coś tam coś tam coś tam coś tam coś tam
jest okej tak
czyli naszą zrobioną naszą pierwszą listę super i teoretycznie
moglibyśmy na tym zakończyć i myślę że w większości może nie w większości przypadków ale w wielu
przypadkach tak naprawdę to rozwiązanie wystarczy to znaczy
mamy tą listę to działa działa fajnie scrolluje się jak widać nie ma z tym żadnego
problemu natomiast problem pojawi się jeśli tych elementów będzie całkiem dużo
zrobimy sobie tutaj sobie zapisałem taki
skrypcik bo jakbym zapomniał o jeśli
byśmy zrobili sobie coś takiego żeby na starcie Elements
albo inaczej żeby przy dodawaniu
dodało się bardzo dużo różnych elementów new
Elems dokładnie czyli
to jest jakby taki mały no nie hak ale po prostu taka
możliwość w JS-ie żeby sobie stworzyć takiego Arraya z 1000 elementów
i mapować po nim i każdy taki element będzie się składać będzie
tekstem w którym będzie po prosto element i nazwa tego
elementu czyli w tym przypadku będzie jakaś liczba no i zróbmy tak żeby tutaj
po kliknięciu dodaj żeby dodać te nasze 1000
elementów a żeby być pewnym że to wszystko działa
okej to sobie odświeżmy o coś nam się tu schrzaniło nieistotne
czasem się ten bundler nam lubi zgubyć okej
odświeżmy sobie reload odświeżmy
tu i teraz dodam jakiegoś taska i klikam
dodaj no i patrzcie co się dzieje no
właśnie nasza lista powstała mamy tych te 1000
elementów natomiast no trwało to całkiem dużo i teraz to
samo możemy zrobić tutaj pewnie to będzie trochę szybciej tak bo
to jednak jest symulator plus to jest iOS natomiast dalej zauważcie że trwało
to całkiem pokaźny czas i teraz gdyby tych elementów nie było dużo
pewnie nie byłoby problemu natomiast no skoro dodaliśmy ich 1000 naraz
czyli na takim wallu facebooka to niestety po pewnym czasie scrollowania to
po prostu by się wszystko wykrzaczyło i jak sobie radzić z tym
jak sobie radzić z tym problemem no jakby za
pomocą samego ScrollView to niestety wiele nie zrobimy mimo tego że lista jest prosta i łatwa to
jednak działa na tej zasadzie że w momencie w
którym dodaliśmy te elementy to tak naprawdę wyrenderowaliśmy 1000 elementów które gdzieś tam
w dół w dół są niewidoczne na ekranie i w następnej
lekcji pokażę wam jak to zoptymalizować za pomocą fajnych narzędzi
React Native'owy do właśnie tworzenia takich zaawansowanych list