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.
Za nami tona dobrej roboty w tym dziale. Przygotowaliśmy
naprawdę sporo, jeśli chodzi o rozbudowanie funkcji naszej aplikacji, a
przed nami jeszcze bardzo, bardzo dużo nowych fajnych rzeczy, ale zanim do tego przejdziemy,
to kilka ostatnich takich kroków, które pozwolą na to, że ten
przyszły development będzie dla nas jeszcze przyjemniejszy. Tak jak mówiłem
na końcu poprzedniej lekcji, mamy przed jeszcze takie dwa komponenty, które możemy wyabstrahować,
które możemy wyciągnąć do osobnych plików i jest to tytuł,
który mamy tutaj i tutaj. One są praktycznie identyczne i mamy
też buttony. W tej chwili buttony nie mają dzielonego stylu. One są w osobnych
plikach CSS i chcemy to zmienić właśnie poprzez stworzenie
nowego pliku z komponentem button, więc teraz to zrobimy. Otworzymy
sobie folder components, stworzymy folder Button, a w nim Button.js. Podobnie
jak w poprzedniej lekcji, stworzymy też od razu Button.module.scss.
Oczywiście musimy zaimportować React'a i
teraz możemy stworzyć sobie naszego button'a z
funkcją strzałkową i to nam będzie zwracać naszego
buttona, który znajduje się na przykład w form'ie. Musimy go po prostu stąd wyciąć. Później
zastąpimy go tym komponentem. Na razie zrobimy to ten sposób, export default
i to w jaki sposób
będziemy chcieli używać tego button'a, to podobnie jak w tym miejscu, tutaj mamy ten generyczny
button. Tak samo nasz będzie działał, czyli będziemy mieć tag'i, tylko że z wielkiej litery
i między nimi będziemy mieć jakiś tekst, który będzie znajdować
się właśnie wewnątrz tego button'a i żeby to zrobić, musimy
wyciągnąć sobie specjalny props, który nazywa się children i wstawić
go to miejsce. Children to jest props, którego nie podajemy wprost,
jako tag'a wewnątrz naszych tag'ów JSX'a. On
jest podawany właśnie jako taki innerHTML naszego komponentu. Wynika
to z tego, co tłumaczyłem w pierwszych lekcjach tego kursu, że ten zapis
to tak naprawdę funkcja React Create Element, która jako jeden z parametrów
przyjmuje children. Wejdźmy jeszcze tylko na chwilę do Form.module, bo
tutaj musimy wyciągnąć sobie style związane naszym button'em. Zresztą
widzisz, że jeśli tych stylów nie ma zaimportowanych, to Visual Studio Code
nam o tym przypomina. Okej, dodajmy
tylko te style i teraz możemy zaimportować nasz button,
w tym miejscu. Następnie
podać go tutaj wpisując add new
item jako body i jak widzisz nasz button z
powrotem się pojawił i w tym właśnie miejscu podawany jest to children, które
wyciągamy sobie wewnątrz naszego komponentu jako props i skoro
nasz button już został stworzony i podmieniony w form'ie, to teraz możemy zrobić to samo w naszym ListItem. Znajduje
się wewnątrz folderu ListWrapper jako prywatny komponent. Szukamy
naszego button'a i w tym miejscu natrafiamy na problem, bo nasz button
w tym miejscu nie jest tak naprawdę button'em, tylko jest <a, czyli jest
zwykłym linkiem, który wygląda jak button, niemniej chcielibyśmy, żeby nasz komponent
button aplikował się zarówno do linków, jak i do takich button'ów funkcyjnych,
które coś tam robią w naszej aplikacji. W tym wypadku, akurat dodają nam notatkę,
więc to co robiliśmy wcześniej to dynamiczne zarządzanie
tagami na podstawie jakiegoś props'a, ale w tym przypadku nie możemy
zarządzać wyłącznie tag'iem, ponieważ jeśli na przykład sprawdzilibyśmy
czy nasz link jest linkiem, poprzez sprawdzenie props'a href, to
i tak po dodaniu odpowiedniego tag'u wszystkie props'y zostałyby
przekazane, jak na przykład rel, jak target, a przecież taki zwykły button,
który nie jest linkiem, nie potrzebuję takich props'ów. Dlatego musimy tu zastosować
renderowanie warunkowe. Termin brzmi dość górnolotnie, ale tak naprawdę nie jest to nic
trudnego. To jest zwykły ternary operator z naszego javascriptu, bo jak pamiętamy JSX to
nie jest nic innego jak JavaScript pod taką powłoczką HTML'a, udawaną.
Przejdźmy zatem do naszego button'u i zobaczymy, co możemy tutaj zrobić. Żeby
użyć ternary operator w naszym JSX'ie, musimy otworzyć curly bracers, czy
też jak to mówię wąsy. Następnie
napiszemy tutaj taki warunek. Jeśli do naszego button'a został podany
props href. Wtedy
mamy zwrócić a. A jeśli podany
nie zostanie href, czyli nie będzie tego props'a, to musi nam wyjść button. To
jest cała filozofia. Tak to naprawdę jest
tak proste. Jedyne co musimy teraz zrobić, to po prostu podmienić
te wartości na prawdziwe JSX'owe, czyli
tutaj zrobimy button. Oczywiście on zostać musi zwrócony
w nawiasach okrągłych i podobnie nasz a, a sobie
skopiujemy naszego ListItem. Zawsze
mówię, że takie ternary operator w JSX'ie, to jest najsmutniejszy komponent w React'ie,
bo z każdej strony ma smutną buzię, i z tej, i z tej,
ale koniec dygresji. Ostatnia rzecz, którą musimy zrobić,
żeby nasz komponent się nie rozleciał, bo jak na razie widzimy, że wszystko się rozpadło, to
wrzucić to defragment. Ostatnim
problemem jest to, że nie podajemy naszego props'a w dstrukturyzacji. Nie
wyciągamy go, więc nasz komponent nie wie co to jest href. Teraz powinienien już
wiedzieć. Okej, możemy teraz usunąć props'y, które są odpowiednie
tylko dla tamtej instancji, czyli href właśnie, który podawany
jest przez rodzica, a resztę z tych props'ów
możemy zostawić. Tutaj jeszcze możemy wrzucić tylko children,
ponieważ podobnie jak w przypadku button'a, nasz link też powinien
się pojawiać z odpowiednim tekstem wpisanym w środek i żeby
nasz komponent działał, to musimy faktycznie dodać ten href, ale
jako props. W ten sposób i teraz powinno to działać. Wrócimy
sobie naszego ListItem. Zaimportujmy button. Okej, jak
widzimy nasz link się pojawił. Nasz button też nadal
działa, nic się nie zepsuło. Sprawdźmy jeszcze konsole, żadnych błędów nie mamy.
Sprawdźmy zatem w inspektorze czy to na pewno jest link. Mamy
link, a to powinien być button. Jest button, czyli
nasz ternary operator działa. Jeśli podajemy props'a href, wtedy
nasz komponent staje się linkiem. Natomiast
jeśli tego href'a nie ma, to staje się button'em. Proste, a
zarazem bardzo potężne narzędzie i bardzo za to właśnie lubię React'a, że tego typu
rozwiązania możemy tu stosować. Jeszcze tylko ostatnia chwila prawdy, żeby zobaczyć czy
nasz link odpala link w nowej karcie, czyli czy wszystkie te rzeczy, które
tutaj mam wpisane, działają poprawnie. Super, wszystko działa.
Rzućmy jeszcze tylko szybko okiem
na nasz tytuł. Znajduje się on tym w tym miejscu i zróbmy z niego osobny
komponent, tak żeby przypomnieć sobie jak tworzenie nowych komponentów. Więc w
folderze components stwórzmy sobie nowy folder o nazwie Title
w nim Title.js. Oczywiście
tutaj również dodamy tag
module.scss. Sprawdźmy
na przykład naszym ListItem, jak wygląda ten element. Wytnijmy go stąd. On
teraz nawet nam zniknie, ale tym się nie przejmujemy. Importujemy React'a, tworzymy
const'a Title. Zwracamy zawartość w postaci H2. Tutaj
również będziemy podawać children, mimo że wcześniej było name, ale name
będzie wpisane wewnątrz tego tagu Title. Jeszcze tylko
zaimportujmy z naszego ListItem odpowiednie style. Zmienimy
je na klasę title, która odpowiada nazwie naszego
komponentu. Zaimportujemy nasze style. Okej i teraz
możemy już użyć naszego komponentu wewnątrz ListItem.
Musimy go oczywiście zaimportować i tutaj podamy jako children -
name, tak jak to miejsce wcześniej i nasz komponent
znowu działa poprawnie, więc teraz podmieńmy go jeszcze w jednym miejscu,
czyli naszym formie i
wszystko działa jak należy. Nasze tytuły
zostały zamienione na uniwersalny komponent, który możemy wykorzystać teraz
w dowolnym miejscu w naszej aplikacji, bez martwienia się o poprawne
nazywanie klas, o poprawne stylowanie, o to żeby każdy ten tytuł wyglądał
dokładnie tak samo. Teraz mamy pewność, że będzie wyglądał właśnie tak. Możemy jeszcze
usunąć niepotrzebny styl z tego miejsca i to na
tyle w tej części kursu. Za nami naprawdę kawał dobrej roboty, a ja już
się nie mogę doczekać, żeby ci pokazać co przygotowałem w kolejnej części tego kursu,
ponieważ zrobi naprawdę dużo trudniej, ale też dużo ciekawiej. Do zobaczenia
w następnej lekcji.