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ść! W poprzedniej lekcji pokazałem ci co możemy zrobić, żeby zmapować elementy
naszej tablicy, do komponentu, żeby iterować po każdym
elemencie naszej tablicy, po każdym obiekcie, który znajduje się w tej tablicy i
wyciągać z niego te dane, których potrzebujemy, ale tę lekcję poświęcimy na to, żeby
nasz kod stał się jeszcze lepszy, jeszcze bardziej czytelny. Właśnie teraz pokażę ci,
jak możemy dokonać refaktoringu. Jednym ze sposobów, żeby na przykład ulepszyć
ten komponent, byłaby destrukturyzacja props'ów, które podajemy,
czyli w tym miejscu usunęlibyśmy item i wyciągnęlibyśmy
te wartości, właśnie z tego item, ale przy użyciu destrukturyzacji, znanej
ES6. czyli podając nasz parametr, w
tym miejscu, podajemy po prostu nazwę rzeczy,
które musimy wyciągnąć z tych klopsprops'ów. Okej, jak widzisz wszystko działa. Wyciągnęliśmy
sobie te zmienne tutaj, do nawiasów, gdzie podajemy parametry, ale
pewnie widzisz to samo, co ja, czyli że podajemy tak naprawdę te same nazwy props'ów
i te same nazwy zmiennych do tych props'ów, czyli mamy name, name, description,
description, image, image i właściwie różni się tylko twitterLink. Łatwo
możnaby było to usprawnić, żeby nie podawać tych wszystkich rzeczy w tym miejscu, tylko
podać cały obiekt, który znajduje się pod hasłem item,
bo tak naprawdę item zabiera wszystkie te cztery rzeczy, więc dlaczego mielibyśmy
go nie podać tutaj. I tutaj również JavaScript przychodzi nam z pomocą, bo
mamy przecież tak zwany Spread Operator, który pozwala nam rozpłaszczyć,
jakby rozsmarować, jakiekolwiek props'y, jakiekolwiek zmienne,
jakiekolwiek rzeczy po obiekcie, czy też po tablicy,
którą podajemy. Tak naprawdę, w takim czystym JavaScript'cie zazwyczaj robi się to po tablicach, ponieważ ta
wersja po obiektach jeszcze nie jest do końca wspierana. Natomiast twórcy React'a uwzględnili
to, że możemy użyć obiektu. Użyć spread operator, a następnie
rozsmarować nasze props'y, w taki sposób. Nie wiem dlaczego zawsze
w polskim używam czasownika rozsmarować, ale spread zawsze kojarzy mi z takim właśnie,
rozciąganiu jakieś Nutelli po kanapce, na przykład i z tym kojarzą mi się też właśnie
te props'y, które jakby rozciągamy po całym
naszym komponencie, bez deklarowania konkretnych kawałków, tylko
tak właśnie wszystko gładko. I teraz jak sobie wyjdziemy do tego ListItem,
to mamy podobną sytuację. Mamy mnóstwo
props'ów, które moglibyśmy zastąpić. Jedyna rzecz, którą teraz musimy zrobić,
to zrobić tutaj twitterLink, ale
zanim usprawnię ten komponent, to chcę Ci jeszcze przypomnieć, skąd się tutaj
w ogóle wzięliśmy. Co tutaj się stało, bo zdaję sobie sprawę, że łatwo się w tym
wszystkim pogubić. Mamy tutaj plik twitterAccounts, z którego eksportujemy
sobie tablice. W tej tablicy mamy konkretne zmienne,
a tak naprawdę klucze, do których przypisane mamy wartości. Mamy
image, name, description i twitterLink. Te nazwy musimy zapamiętać, ponieważ
będziemy się do nich odwoływać właśnie w tym ListItem. W międzyczasie jednak
zanim przejdziemy do ListItem, mamy ListWrapper, który jest rodzicem komponentu ListItem
i importuje właśnie, do siebie wszystkie te obiekty z
naszej tablicy, a następnie iteruje po nich, przy użyciu funkcji map. Funkcja
map sprawdza, ile mamy tych obiektów, a następnie każdy z
tych obiektów wypluwa nam w takiej postaci, takiego item'u, do
którego mamy dostęp, ale który tym miejscu rozsmarowujemy
po naszym komponencie, przy użyciu spread operator. Tak więc kiedy już
wszystkie te elementy z naszego obiektu, czyli wszystko to zostanie
podane w tym miejscu, możemy przejść do naszego ListItem, gdzie
w końcu możemy odwołać się do tych nazw, które pierwotnie mieliśmy właśnie
w twitterAccounts, czyli do image, name, description i twitterLink. Stąd
wzięły się te nazwy. Natomiast props wziął się stąd, że podaliśmy
tutaj cały obiekt i on jest tym props'em. I w taki
sposób, odwołujemy się do niego w naszym komponencie dziecku. Podobnie
jednak jak przed chwilą, możemy się pozbyć wszystkich tych props'ów w tym miejscu i zdestrukturyzować
je używając klamer. Żeby
jeszcze podnieść czytelność naszego kodu, to możemy zrobić coś takiego. Okej,
rozbiliśmy to sobie na linijki. Elementy, które dostawały więcej niż
jednego props'a, mają teraz też kilka linijek. Wtedy
łatwiej czytać te wszystkie komponenty. Wszystkie elementy w naszym DOM'ie. I została
taka jedna bardzo mała sprawa, ale niezwykle istotna na dalszych etapach
rozwoju aplikacji, bo nie spojrzeliśmy w konsolę. A jeśli
sprawdzimy konsolę, to zobaczymy, że React ostrzega nas przed jedną, bardzo
ważną rzeczą. Każdy element, który mapujemy w naszej aplikacji, powinien
mieć tak zwany unikalny klucz i teraz, jeśli przejdziemy sobie na naszego ListWrapper,
zobaczymy, że nic tutaj takiego nie podajemy, a powinniśmy. W naszym
widoku to niewiele zmienia, ponieważ jest to statyczny widok. Natomiast, jeśli sprawy przybrałyby
bardziej dynamiczny charakter lub wprowadzilibyśmy tutaj jakieś zaawansowane animacje,
to wtedy moglibyśmy mieć problem. Dlatego w tym
miejscu musimy dodać unikalny
klucz, którym może być na przykład nazwa naszego elementu. Każda
nazwa elementu listy jest inna, ponieważ każda jest po prostu imieniem i nazwiskiem danego
twórcy, więc mamy pewność, że one nie będą powtarzane i w tym wypadku jesteśmy już
zabezpieczeni i nic nam nie pojawia. I nasza aplikacja na pewno będzie
działać jak trzeba, kiedy sprawy przybiorą nieco bardziej skomplikowany charakter. I w
tej lekcji to tyle. Pokazałem Ci dość dużo, jeśli chodzi o ulepszanie tych komponentów, o naprawianie
ich, o sprawianie, żeby one po prostu były jeszcze bardziej czytelne. A w
następnej lekcji powiem Ci jak możemy weryfikować, czy props'y, które
podajemy do naszego komponentu, są faktycznie props'ami, których oczekujemy. Do
zobaczenia następnej lekcji.