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.
Skoro takie wprowadzenie do klasowych komponentów mamy już za sobą, to możemy z
pewnością przejść do dalszej części naszej aplikacji, gdzie po prostu stworzymy
sobie nasz pierwszy taki prawdziwy, klasowy komponent ze state'em.
Jeśli spojrzymy na nasz design, to mamy tutaj
takie dwa duże komponenty. Jeden to jest ListWrapper, który już posiadamy, a drugi
to jest form, który właśnie stworzymy, w tej części kursu. Natomiast musimy się jeszcze zastanowić
i odpowiedzieć sobie na pytanie, który z naszych komponentów będzie trzymał stan? Który
będzie zawierał wszystkie elementy naszej listy? Jeśli spojrzymy sobie na ten layout,
to zobaczymy, że mamy tutaj dwa te komponenty jako dzieci i mamy
też rodzica, który zawiera oba te komponenty i to on właśnie będzie
trzymał nasz state. Ponieważ z jednej strony będzie otrzymywał od
naszego form'a informacje o nowym elemencie, a z drugiej strony będzie
podawał ten nowy element do naszego ListWrapper, który po prostu renderuje
te wszystkie elementy. Celowo, w tym kursie nie wprowadzam żadnego State Management, na
zasadzie MobX albo Redux'a, ponieważ chcę pokazać, że
w takiej podstawowej formie React sam w sobie, zawiera bardzo dużo
ciekawych narzędzi, które pozwalają na zarządzanie stanem w naszej aplikacji. Bez
dodatkowego komplikowania naszego kodu. Wiele kursów zawiera
od razu wprowadzenie do Redux'a, co moim zdaniem jest błędem, ponieważ niepotrzebnie
komplikuje początkowy etap nauki, co w efekcie owocuje
tym, że ludzie często przekomplikowują swoje projekty, przekomplikowują swoje
aplikacje, nie chcą wykorzystywać całego potencjału React'a
i niepotrzebnie dokładając kolejne biblioteki, do swoich projektów. Uważam,
że jest solidne nauczenie się podstaw danego framework'a pozwala na lepsze
jego wykorzystanie, mądrzejszego wykorzystania i w efekcie na budowanie
szybszych i wydajniejszych aplikacji. Przejdźmy zatem do kodu. W tej
chwili możemy już się pożegnać naszym przykładowym MyComponent. Nie będziemy już go wykorzystywać
w naszej aplikacji. Możemy go po prostu usunąć. Jeśli spojrzymy
sobie na nasze App.js, to zobaczymy, że przypomina ono strukturę
naszego layoutu, czyli jest rodzicem dwóch komponentów, w tym ListWrapper,
który już się w nim znajduje. Więc jedyne, co musimy zrobić, usunąć
tutaj MyComponent i stworzyć
nowy komponent, który będzie odpowiadał za formularz, ale zanim
to zrobimy, tak jak mówiłem - najpierw przekształcimy ten komponent w klasę ze state'em. Więc
musimy tutaj zmienić na class extends, React Component. Tak
jak mówiłem poprzednich lekcjach tworzymy funkcję render, która zwraca nasz JSX. Dodatkowo
tworzymy state, który będzie zawierał elementy
naszej listy. I co, będzie to
pusta tablica, ale za chwilkę się to zmieni. Tutaj musimy
jeszcze podać propsa items, this.state.items.
I to właśnie będą te elementy
renderowane w naszej liście. Póki co, jest to puste
i jeszcze tego nie zmieniamy, ponieważ chcemy jeszcze stworzyć tak zwany inny initial state,
czyli inicjalną wartość naszego stanu. Tak, żeby te wartości,
te elementy nam nie zniknęły, ponieważ chcemy je zachować. To są bardzo cenne zasoby,
bardzo cenne i ciekawe konta. Więc wejdźmy sobie teraz do folderu data i naszą pustą
tablicę w state'cie podmienimy na tę oto tablice
z naszymi elementami. I tutaj
mamy jeszcze jeden błąd, ponieważ wszystkie nasze obrazki są zapisane
na dysku i są importowane w tym miejscu. Natomiast
już pora, żeby przejść na zwykłe linki - linki do obrazków, ponieważ nasz
formularz również będzie wspierał właśnie taką formę dodawania obrazka, tylko
w postaci linka, więc w tej chwili usuńmy sobie folder data. Już nie
będzie nam potrzebny i żeby zaoszczędzić nam czasu, żeby już nie dodawać
każdego osobnego avatara - po prostu dodajmy
jakikolwiek obrazek, na przykład, obraz Malewicza. Zamiast
naszych image. Oczywiście,
póki co, nie widzimy żadnych zmian, bo jeszcze renderowane są stare elementy. Ale
teraz jeśli przejdziemy sobie do ListWrapper. Usuniemy
to. Podamy props'a
i zmapujemy props.items. W
ten sposób, to nasze
elementy z powrotem się pojawią i zamiast avatarów, mamy kwadrat Malewicza.
Wszystko gra i tym prostym sposobem, stworzyliśmy właśnie komponent, który
ma własny state i podaje dalej jego dzieci. A co więcej, umożliwiliśmy tym
sposobem, dodawanie nowych elementów w bardzo prosty sposób. Zaraz
zobaczysz, jak to będzie wyglądać, ale jeszcze zrobimy jedną rzecz. Wszystko
to wchodzimy do osobnego consta, ponieważ wygląda to okropnie. Jeśli tak
dużo zajmuje miejsca w naszej klasie. Nazwiemy to initialStateArray i
w tym miejscu, za pomocą spread operator - dodamy
te elementy. Używamy spread operator, tak jak już mówiłem w poprzednich lekcjach
tego kursu. Po to, żeby nie wsadzać tablicy w tablice, tylko żeby zawartość
tej tablicy została umieszczona, po prostu, w tej tablicy tutaj, bez
zbędnego zagnieżdżenia. Okej, skoro mamy nasz klasowy komponent - zostaje
tam, to możemy teraz przejść do tworzenia formularza, ale tym zajmiemy się w następnej
lekcji.