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 ostatniej lekcji stworzyliśmy formularz, który pozwala nam w końcu dodawać
nowe elementy do naszej listy. Mam akurat tutaj pod ręką
rzeczy, które już wcześniej opisywaliśmy, ale sprawdźmy tylko, czy to na pewno działa. Okej,
wszystko działa i mamy teraz tylko taki problem, że zawsze jak to dodajemy,
to właściwie nie ma żadnej animacji, co sprawia, że ta aplikacja może być nieco
chaotyczna dla użytkownika - takie skakanie ekranu, to nie jest najlepsze User Experience jakie
możemy sobie wymarzyć. Więc tym się na pewno zajmiemy, a dodatkowo
nie masz żadnej walidacji, czy to co tutaj dodajemy, jest w ogóle
poprawne, czy na przykład linki są linkami? Czy imię,
które wpisujemy już wcześniej nie zostało dodane, bo pamiętaj, że imię jest tutaj
naszym kluczem. Dla przypomnienia, otworzymy sobie ListWrapper i
w tym miejscu kluczem jest właśnie nasze imię - imię, które
znajduje w tym miejscu, więc jeśli podalibyśmy dwa takie same, to
nawet jeśli dodamy coś innego tutaj, to powinniśmy
dostać błąd w konsoli. Tak, React
ostrzega nas przed tym, że mamy dwójkę dzieci, o tych
samych kluczach, co jest niedopuszczalne, dlatego musimy zadbać
o to, aby użytkownik nie mógł dodawać dwóch takich samych elementów, a
przynajmniej dwóch elementów, posiadających ten sam tytuł, to samo imię. A będziemy
zapobiegać temu wyświetlając modal z informacją, że trzeba ten
element nazwać jakoś inaczej. Ale żeby to zrobić, to też będziemy musieli trochę pogrzebać
w stylach, dlatego teraz wprowadzimy nowe narzędzie do
naszej aplikacji - narzędzie, które pozwoli nam na lepsze, bardziej
świadome, ale też sprytniejsze dodawanie stylów, bo problem
z którym mierzymy teraz naszej aplikacji, jest taki, że wszystkie style są dzielone, czyli
jeśli w tym pliku, zrobimy sobie jakąś klasę, na przykład wrapper,
to ta klasa będzie współdzielona ze wszystkimi plikami
CSS w naszej aplikacji, więc tak naprawdę style mamy globalne - przez
to musimy dodawać takie, a nie inne nazwy klas, co w większych
projektach jest niedopuszczalne i może prowadzić ogromnego chaosu. Dlatego
wymyślono coś takiego, jak CSS modules, które pozwala na nadawanie
podobnych klas albo nawet identycznych klas, w każdym z komponentów, a mimo
to każdy z tych komponentów, będzie miał swoje indywidualne style, a nazwy
klas nie będą na to wpływać. Dodatkowo zainstalujemy też Sass'a, który
pozwoli nam na wykorzystywanie plików scss w naszych Node Modules, dzięki
czemu będziemy mogli po prostu trochę wygodniej posługiwać się takimi rzeczami, jak zmienne,
jak mixin'y, jak zagnieżdżanie elementów stylowanych. Jeśli
wejdziemy sobie na dokumentację Create React App, czyli tej paczki na
podstawie, której budujemy nasze aplikacje. Ona zapewnia nam, po prostu, bardzo dużo
narzędzi, które możemy wykorzystać out-of-the-box, czyli bez
żadnego przygotowania. Między innymi właśnie CSS Modules. Zobaczmy
zatem jak możemy to dodać. W tym miejscu "Styles and Assets"
wybieramy CSS Modules i widzimy, że jedyne, co
musimy zrobić, to tak naprawdę stworzyć pliki ze
stylami, które mają prefiks module.css lub
kropka scss. Ale jeśli zajrzymy sobie do fragmentu,
gdzie mowa o Sass'ie, czy też też SCSS'ie, to widzimy, że musimy doinstalować
jeszcze jedną rzecz, a mianowicie node-sass - narzędzie
odpowiedzialne za przetwarzanie naszych plików, za preprocesowanie ich,
żeby w efekcie powstawały pliki CSS, więc teraz robimy yarn
add node-sass. Czekam, aż się zainstaluje
i kiedy nasza paczka została zainstalowana, możemy teraz spróbować
dodać jakiś plik SCSS. Załóżmy, że będzie
to form. Zmienimy mu nazwę na form.module.scss,
a następnie spróbujemy zmienić nazwę
klasy na wrapper, a dodatkowo zagnieździmy sobie
H2 - właśnie w tym miejscu. Spróbujemy
odpalić naszą aplikację i możliwe,
że wasz Create React App wyskoczy z błędem, z tak zwanego pre-flight
check, gdzie powie wam, że coś się nie zgadza, na przykład z babel-loader. Tego
typu błędy są dość powszechne i zdarzają się podczas używania Create React App
i jedyne, co musimy zrobić to prostu postępować zgodnie z instrukcjami
z nadzieją, że ten problem zostanie rozwiązany. Problem ten wynika
z konfliktów, ponieważ są tak naprawdę zainstalowane dwie paczki w naszym repozytorium -
jedna to babel-loader o wersji 804, a druga
to wersja 802. Musimy zlokalizować skąd on w
ogóle wziął, więc pierwsze, co robimy to po prostu postępujemy zgodnie
z instrukcją, którą tutaj mamy napisaną. Jeśli to nie pomoże, to będziemy myśleć
co dalej. Celowo nie pomijam tego fragmentu, ponieważ chcę ci pokazać że
debugowanie takich rzeczy w konsoli, jest czymś, co jest
na porządku dziennym w pracy dewelopera i po prostu trzeba wiedzieć, jak sobie z tym radzić. Nie
trzeba panikować, więc pierwsze co musimy usunąć, to yarn.lock. Następnie
usuwamy node_modules. Sprawdzamy,
czy w package.json nie mamy babel-loader'a, ale nie
mamy, więc teraz to co musimy zrobić, to zainstalować na nowo wszystkie
dependencje. Zobaczymy, czy to pomoże. Okej,
wszystkie paczki są z powrotem zainstalowane. Sprawdzamy i niestety
nie pomogło, więc teraz przechodzimy do planu B, czyli
sprawdzimy czy w moim globalnym node-modules znajduje
się babel-loader. Tak, mamy
tutaj babel-loader. W moim folderze globalnym, więc
teraz to co musimy zrobić, to usunąć babel-loader
z tego miejsca i
po usunięciu sprawdzimy, czy teraz działa. Nadal
nie działa, ale tym razem problemem jest webpack. Najwidoczniej
mój folder zachował jakieś stare
wersje tych paczek i
w końcu wszystko działa, jak należy. To znaczy nie do końca, ponieważ mamy
błąd, ale jest to błąd wynikający z tego, że nasza aplikacja w końcu
ruszyła, więc to co musieliśmy zrobić, to usunąć rzeczy
z globalnego node_modules - tam znajdowały się starsze wersje
naszych paczek i w związku z tym wchodziły one konflikt
w naszym Create React App, ale tak jak widzisz, wszystko było
napisane w tych instrukcjach. Dlatego warto uważnie czytać błędy, które logowane
są do konsoli, a teraz możemy przyjść pracy. Zainstalowaliśmy
css-modules i zainstalowaliśmy preprocesor Sass, w związku
z czym nasze style już za chwilkę ulegną dużej poprawie, ale
o tym już następnej lekcji.