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 stworzyliśmy taki prosty formularz, który logował
nam rzeczy, które wpisywaliśmy do niego, do naszej konsoli. Teraz
przejdziemy do dodawania prawdziwych elementów do naszej listy - właśnie za pomocą
tego formularza. Jak widzisz, on się dość mocno zmienił. Dodałem do niego odpowiednie style,
żeby po prostu dobrze wyglądał, nie wpływa to za bardzo na to jak aplikacja działa, ale
na pewno wpływa na to jak wygląda. Dlatego nie zajmowaliśmy się tym w żadnej
osobnej lekcji. Możesz, fragment kodu odpowiedzialny za jego wygląd, skopiować ze
specjalnego gista czy też dżista, który przygotowałem do tej lekcji. Dla krótkiego
przypomnienie, jak działa nasz formularz, w naszym pliku App.js podajemy
funkcję, która przechwytuje event, dostaje go
w tym miejscu jako parametr. Następnie tę funkcję podajemy jako props'a do
naszego form, czyli komponentu, które widzimy w tym miejscu. Podajemy
go jako props'a submitFn, czyli submit function. Następnie
destrukturyzujemy nasze submit function, w tym miejscu, czyli wyciągamy go, żeby
nie pisać po prostu props kropka submit function - możemy wpisać wtedy po
prostu submitFn, ponieważ to jest zdestruturyzowany prop. I mówimy
naszemu formularzowi, że za każdym kiedy zostanie on zasubmitowany, to ma właśnie
wykonać tę funkcję. Podajemy tylko nazwę funkcji i ten parametr event,
który podawaliśmy w App.js. Jest wtedy przekazywany automatycznie, a wraz z
nim wszystkie informacje, dotyczące pól znajdujących się w naszym
formularzu. W tym przypadku mamy cztery pola, więc mamy tablice
z czterema elementami. Pamiętamy, że pierwszy to jest zawsze zero. Jeśli
wpiszemy cokolwiek w naszym formularzu, to
odpowiednie wartości zostaną przekazane do tej funkcji. To tak gwoli przypomnienia,
więc teraz przechodzimy do dodawania naszego elementu. Do
state'u i zarazem do naszej listy. Pierwsze, co musimy zrobić to
zerknąć na nasze elementy z inicjalnego state'u. Mamy
oczywiście tutaj w tym const'cie initialStateItems i tak
naprawdę, możemy sobie jeden po prostu skopiować, żeby odzwierciedlić jego strukturę -
stworzymy sobie teraz const'a. Może
tego nie usuniemy na razie. Const newItem. Będzie
to obiekt zawierający wszystkie te cztery
klucze. Dan Abramov akurat nie ma description, ponieważ usuwaliśmy, żeby pokazać
jak działa defaultProps, więc po prostu dodamy description
sami. W tym miejscu, wszystkie
te elementy możemy usunąć. Potrzebujemy tylko kluczy. Teraz
tylko musimy zachować odpowiednią kolejność naszych elementów, więc mam najpierw name,
później mamy twój ten link później image, później description. Następnie
podmienimy te cztery wartości na
te elementy, które logowaliśmy tutaj. W ten
sposób stworzyliśmy nowy obiekt, który za chwilkę będziemy dodawać do naszego
state'u. Najłatwiej możemy zrobić poprzez użycie funkcji setState, w której
powiemy, że items, od teraz to this.state.items. Z
dodanym new item. Musimy
użyć tutaj spread operator'a wskazać, że mamy też jakieś starsze
elementy w naszej liście, żeby one nie zostały usunięte. W momencie, kiedy by tego było,
to nasz state zostałby zastąpiony tylko jednym elementem - tym
nowym, który podajemy. Zdecydowanie jest to najbardziej intuicyjny
sposób. Jednak jest lepszy, sugerowany też przez dokumentację React'a,
który używa funkcji prevState, która
dopiero podaje poprzedni stan, w tym
miejscu. Zabezpiecza
nas to przed błędami wynikającymi z dynamicznego zmieniania naszego stanu, dzięki
temu React ma po prostu dostęp do ostatniej wersji naszego state'u, z której
pobiera sobie items i dzięki temu jesteśmy pewni, że to items w tym
miejscu, będzie tym starym items, a nie items, które na przykład utworzyło się zaraz
po tym dodaliśmy new item. Tego typu błędy, dzięki funkcji
prevSatet i po prostu się nie pojawią w naszym kodzie, a teraz sprawdźmy, czy
na pewno to działa. Wybierzmy sobie tylko jakiś obrazek, może
to być na przykład avatar Dan'a Abramov'a. Musimy skopiować jego
link, żeby móc go dodać w tym miejscu. Powiedzmy,
że to będzie właśnie New Dan, image...
zróbmy tego Twittera,
faktycznie, kierującego do Dan'a Abramov'a. Dajmy
cokolwiek i nasz nowy element
pojawił się tym miejscu. Mamy zarówno obrazek, jak i tytuł, jak i
opis i link, który działa. Więc wszystko jest
tak jak zaplanowaliśmy. Dwie rzeczy, które jeszcze tak na szybko możemy usprawnić, to to,
żeby resetować za każdym razem form, kiedy submit'ujemy nasze zmiany. Możemy to
zrobić przy wykorzystaniu funkcji reset, która jest prostu wpięta do
naszego form'a. Spróbujmy czy to zadziała. Wybierzmy
te same dane. Tak i nasz form się
ładnie resetuje. Nie jest to żadna React'owa rzecz, jest to zwykła rzecz
wpięta w HTML form, po prostu dzięki funkcji reset,
możemy wyczyścić nasze pola. A drugą rzeczą jest to, że
kiedy jesteśmy w naszym ListItem, to
fajnie, żeby link odpalał się w nowej karcie, bo teraz wszystko mamy
w jednej karcie. Możemy to zrobić poprzez dodanie tag'a target, blank
i teraz nasze elementy odpalają się
w nowej karcie. Świetnie, to tyle w tej lekcji. Dodaliśmy
nowe rzeczy do naszego stanu. Mamy jeszcze kilka rzeczy, które fajnie
będzie usprawnić w naszej aplikacji, ale o tym już w następnych lekcjach.