od Podstaw
4 godz. 55 min · ReactJS · Full-stack i Programowanie
Adam RomanskiFrontend developer & YouTube CreatorWszystkie tresci podzielilem na piec rozdzialów, w których bedziemy rozwijac wymyslona przeze mnie aplikacje sluzaca do kolekcjonowania najciekawszych artykulów, notatek oraz kont twitterowych znalezionych w sieci.
Zaczniemy od prostych widoków, na podstawie których wyjasnie Ci, co stoi u podstaw Reacta – dowiesz sie czym jest JSX, oraz poznasz pojecie komponentu funkcyjnego. Dzieki temu oswoisz sie ze skladnia Reacta, która poczatkowo moze wydawac sie nieco obca.
W React niemal wszystko opiera sie o komponenty. Czym one sa? Dowiesz sie tego w drugim rozdziale. Opowiem Ci jak je tworzyc oraz jak tworzyc relacje miedzy nimi. Wyjasnie Ci bardzo szczególowo jak dzialaja propsy oraz w jakich sytuacjach nalezy je wykorzystywac. Zobaczysz tez, jak w Reactcie pracujemy z danymi, jak mozemy je przetwarzac a nastepnie stosujac kilka strategii stylowania komponentów, wszystko wyswietlic w atrakcyjny sposób.
W trzecim rozdziale poznasz sposób konstruowania komponentów klasowych, posiadajacych wlasny stan, dzieki któremu stworzysz miedzy innymi dynamiczny, inteligentny formularz, a takze wiele innych interaktywnych elementów. Dzieki temu szybko zrozumiesz róznice miedzy komponentami funkcyjnymi a klasowymi.
Kiedy juz poczujesz sie dosc pewnie budujac komponenty, dodamy tzw. routing w rozdziale czwartym, który pozwoli nam na stworzenie wielu podstron, które urozmaica nasza aplikacje – dowiesz sie dzieki temu jak integrowac dodatkowe narzedzie w naszym projekcie, oraz jak budowac bardziej skomplikowana strukture aplikacji.
Na sam koniec zostaimy sobie tzw. state managment, czyli zarzadzanie informacjami wspóldzielonymi przez wiele komponentów i podstron. Nie wykorzystamy jednak ani Reduxa ani Mobxa, poniewaz chce Ci pokazac, ze w samym Reactcie kryje sie ogromny potencjal nawet przy tak kompleksowych zadaniach. W tym przypadku uzyjemy Context API, który w latwy sposób pozwala nam teleportowac dane z jednego miejsca naszej aplikacji do drugiego. Podczas rozbudowywania naszej aplikacji o Context API dopracujemy tez wszystkie inne jej elementy, aby na samym koncu kursu wydeployowac nasz gotowy produkt w serwisie Netlify – zobaczysz, ze wypuszczenie aplikacji Reactowej do sieci i udostepnienie jej innym, jest niezwykle proste.W tym kursie skupiamy sie wylacznie na Reactcie z uzyciem jedynie niezbednych narzedzi. Wierze, ze doskonale opanowanie fundamentów, na których opiera sie ta technologia pozwoli Ci pózniej latwiej wkroczyc w swiat setek pluginów i paczek dostepnych w jego ekoystemie.
Ten kurs powstal z mysla o osobach chcacych zaczac swoja przygode z frameworkami JavaSript. Zaklada on wiedze na temat podstaw JavaScript (w tym ES6), jednak przy bardziej skomplikowanych rozwiazaniach zawsze pojawia sie slowo wyjasnienia. \n\nPoziom kursu zostal dopasowany do osób, które maja za soba juz kilka projektów w czystym JavaScript i chca wejsc na wyzszy poziom, przygotowujac sie tym samym do pracy z ta technologia.
Cześć! Po stronie pliku form.js już dopasowaliśmy wszystko tak, że jestem
prawie gotowy do przesyłania danych ze swojego widoku, do widoku root'owego.
Natomiast po stronie root'owego widoku, właśnie, musimy jeszcze
dopasować kilka rzeczy, żeby te elementy, które wysyłamy mogły się dodawać do state'u, a
później mogły zostać przesyłane do podstron,
do Twitters, Articles i NoTES. i teraz właśnie tym
zajmiemy. Przejdźmy sobie do pliku form.js i spójrzmy na
naszą funkcję addItem, która wykonuje się na event'cie submit. To
chcemy, jak najbardziej, zachować. Tylko chcemy teraz w tej funkcji przekazywać
dwie rzeczy. Domyślnie przekazywane był tylko event, związane
z submit'em, który przesyłał takie rzeczy, jak właśnie pola formularza i tak
dalej. Natomiast teraz, pola formularza w samym event'cie, submit
już nie są dla nas tak istotne. Właściwie interesuje nas tylko funkcja preventdefault,
która pozwala nam na nie przeładowanie strony przy wykonaniu submit'u. Natomiast
chcemy, na pewno, do tej funkcji i dodatkowo, jeszcze wrzucić state,
czyli do addItem musimy dodać this.state.
Oczywiście, jeśli zostawimy to tak, jak teraz, to
wszystko nam się zepsuje, bo ta funkcja zostanie wykonana od razu, a ona ma zostać wykonana
w momencie wywołania event'u submit. Więc musimy
stworzyć tutaj, tak jak wcześniej, w tym kursie funkcję, która zwraca funkcje i dopiero tutaj
podajemy this.state, a dodatkowo, żeby nie uciekł
nam ten event, który jest również dla nas istotny, to musimy w tej pierwszej funkcji
podać event i on
tutaj również musi się znaleźć. Teraz, jeśli przejdziemy
sobie do root'owego widoku, do naszej ulubionej funkcji addItem. Wywalimy to
wszystko, to co tutaj mieliśmy. To już jest na dla nas nieistotne. Zostaje tylko preventDefault i pamiętaj,
że mamy teraz dwa parametry w naszej funkcji. Mamy event i
mamy new item. Zróbmy sobie jeszcze coś takiego, że przy
wykonaniu tej funkcji, na samym końcu, chcemy wykonać this.closeModal,
żeby nasz modal się, po prostu, zamykał. Nie będziemy już wtedy resetować
tych pól formularza. Zresztą to już i tak jest nierealne, ponieważ teraz
na pola formularza wpływa funkcja handleImportChange i nie
moglibyśmy tego tak, po prostu, zmienić. I tutaj po raz kolejny,
posłużymy się tym sprytnym rozwiązaniem, które pokazałem już w poprzedniej lekcji,
czyli wykorzystamy automatyczne przypisywanie state'u
na podstawie kluczy. Tylko musimy jedną rzecz tutaj zmienić, bo jak sobie zobaczysz,
to tutaj jako type, podajemy jeden z tych elementów: twitter,
article i note. Natomiast w naszym state'cie, w nowym widoku,
mamy twitters, articles i notes, czyli liczbę mnogą i wtedy te nazwy
nam się będą gryzły. Nie możemy wtedy tego tak łatwo wykorzystać, więc zróbmy
tak, że typ zawsze będzie w liczbie pojedynczej. A dodatkowo
uprośćmy jeszcze jedną rzecz i tutaj wychodzi po raz kolejny fakt, że jak
się rozwija aplikacje, to do pewnych rzeczy dochodzi się z czasem i warto
czasami zatrzymać się nad jakimś pomysłem dłużej i zobaczyć, czy
on faktycznie ma sens i tutaj, w tym przypadku, czy faktycznie
ma sens to, że trzymamy to w obiekcie items. Oczywiście, moglibyśmy to update'ować
później, tutaj w funkcji addItem, bez problemu. Tylko ta składnia byłaby
dużo bardziej skomplikowana, bo dwa razy musielibyśmy rozpościerać prevState, czyli
ten poprzedni stan wewnątrz obiektu, a później jeszcze wewnątrz
tablicy. Moim zdaniem popsułoby to trochę jakość kodu. A nikomu
nie służy ten items, w tym miejscu. Możemy go spokojnie wywalić i nasza
aplikacja i tak zajmuje się tylko i wyłącznie wyświetlaniem notatek,
które dodajemy, więc jeśli zrobimy to w ten sposób, to to też będzie
okej. A dużo uprości nam pracę, więc skoro to już
ogarnęliśmy, to teraz nie pozostaje nam innego, jak tylko zacząć dodawać
notatki do naszej aplikacji. Użyjemy, jak zwykle, this.setState, wewnątrz
którego, użyjemy prevState, aby odwołać się do poprzedniego
stanu. Pamiętaj, że setState jest asynchroniczne, więc
poleganie na danych, które są w bieżącym state'cie,
może być ryzykowne. Jeśli chcemy coś dodawać do state'u, który był, to
lepiej zawsze używać właśnie prevState. Już teraz to robiliśmy. Zresztą w tym kursie. I teraz,
tutaj robimy newItem.type,
podobnie jak w poprzednim przykładzie, w pliku form.js,
a następnie otwieramy tablice. Wrzucamy tutaj
poprzedni stan oraz
dodajemy nowy element. Nie zamknąłem funkcji w nawiasy
okrągłe. Teraz będzie okej. Okej i
tutaj słowo wyjaśnienia - newItem.Type, cóż to takiego jest? Najłatwiej
będzie to pokazać na otwartych Chrome DevTools'ach. W zakładce React,
odpalimy sobie nasz formularz. Wejdziemy
nawet do naszego modala i do forma, żebyśmy mogli
mieć podgląd na state. To
jest nasze newItem, czyli state z naszego form'a, w naszej
funkcji addItem, nazywa się newItem. To jest ten state i on
ma tutaj klucz type. Jak widzisz, type, twitter,
odpowiada kluczowi z naszego state'u, w root'owym widoku, twitter. Więc newItem.type,
tak naprawdę, przy wykonaniu tej funkcji
teraz, będzie po prostu twitter'em. Tutaj będzie twitter, dwukropek
i podobnie tutaj, prevState i dobieramy
się do klucza twitter, czyli prevState, kropka, twitter. To
jest tak samo, jak tutaj wpisujemy prevState i w nawiasach kwadratowych, newItem.type. Wykorzystujemy
po prostu te dynamiczną wartość, która się zmienia w zależności od tego, co
wybierzemy w naszym formularzu i następnie po przecinku,
to już jest proste. Dodajemy cały nowy element
do odpowiedniej kategorii w naszym state'cie. Więc teraz, jeśli to
wykonam, to teoretycznie w root'owym elemencie w state'cie, powinien pojawić
się nowy element. Chwila prawdy i już
go widzimy. Mamy go, więc teraz przetestujemy
szybko pozostałe formularze. Sprawdźmy,
że to działa i dodajmy, na wszelki wypadek, dwie notatki. Jak
widzisz, mamy jeden artykuł, dwie notatki, jednego Twittera. Treści
tego się zgadza i tym całkiem prostym sposobem, stworzyliśmy
fajny system dodawania notatek do naszej aplikacji. Z takim globalnym state'em,
który wykorzystamy w następnej lekcji, żeby w końcu podmienić ten napis,
który nas tutaj straszy od początku tego działu i zróbmy
w końcu te notatki. Niech ta aplikacja wygląda tak, jak trzeba. Niech będzie fajna,
a tym samym będziemy powoli zbliżać się do finału tego kursu, gdzie wydeploy'uemy
naszą aplikację.