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ść! Skoro nasz modal już jest gotowy do dalszej pracy, to teraz zajmiemy
się jego otwieraniem i zamykaniem. Żeby to zrobić, stworzymy sobie w naszym
głównym komponencie, w naszym root'owym widoku, nową wartość w state'cie. Będzie
się nazywać isModalOpen. Domyślnie
ustawimy ją na false. A w
tym miejscu, stworzymy znane ci już, renderowanie warunkowe. Zapytamy,
czy isModalOpen i jeśli
tak, to nasz modal się pojawi. Tutaj tylko jedna rzecz, żeby
nie pisać tego długiego this.state.isModalOpen, to
możemy sobie to zdestrukturyzować w naszej funkcji render. W taki sposób. Jest to
powszechna praktyka, która pozwala nam na to, żeby nasz kod był trochę bardziej czytelny. Tutaj,
jeśli mielibyśmy kilka wartości odwołujących do stanu, no
to wtedy mielibyśmy problem. No, każda linijka byłaby tak naprawdę, bardzo, bardzo
długa, więc w ten sposób możemy sobie zaoszczędzić trochę czasu i miejsca w
kodzie. No, dobrze, ale skoro już mamy isModalOpen, teraz musimy to
zmieniać. Czymś to musimy otwierać i tak jak już mówiłem, tym będzie zajmować
się button new item, ale żeby on mógł nam to robić, to musimy
stworzyć też funkcję, która będzie wywoływać nasz modal, więc
to co chcemy zrobić, to stworzyć funkcje openModal. To
oczywiście będzie funkcja strzałkowa i wewnątrz niej stworzymy
this. setState, isModalOpen i chcemy,
żeby ta funkcja zawsze otwierała nam modal. Niekoniecznie go
zamykała, bo jeśli chcielibyśmy, żeby zamykała, to musielibyśmy tutaj dodać jeszcze
prevState, odwołując się do poprzedniego stanu, który
istniał, ponieważ jak już wiesz, setState jest asynchroniczne, więc jeśli
zmieniamy coś w zależności od poprzedniego stanu, to zawsze odwołujemy się do prevState,
tak jak w tym miejscu. A my chcemy, żeby zawsze było true, po
kliknięciu tego guzika, więc to będzie taka bardzo prosta funkcja i teraz,
skoro już mamy tę funkcję gotową, to teraz musimy ją przekazać do naszego header'a, bo
w nim znajduje się button. Nazwiemy ją openModalFn, this.o
penModal. W ten sposób, funkcja
została przekazana do naszego header'a. Jak sobie tutaj wejdziemy, to
możemy ją w props'ach zdestrukturyzować, a następnie na
naszym button'ie, jeśli wykonamy onClick, to
chcemy, żeby to się wykonało i teraz, z
tym button'em, już teraz cię uprzedzę, będzie bardzo ciekawa sytuacja. Jeszcze o
tym nie odpowiadałem, ale to się zdarza bardzo często i co więcej, w React'cie
bardzo łatwo o tym zapomnieć. Popatrz, dodaliśmy props'a onClick,
z gotową funkcją, która ma się wykonać po kliknięciu w nasz
button. Mimo to, nic się dzieje. Wynika
to tego, że nasz button, sam w sobie, jest już komponentem, nie
jest generycznym elementem HTML'a. Nie jest zwykłym button'em, tylko jest komponentem button'em
i podaliśmy mu tak naprawdę, nowego props'a. A jeśli
wejdziemy sobie tutaj i spojrzymy na props'y w naszym button'ie, które wyciągamy,
to mamy tylko children, href i secondary. Nie
mamy tutaj onClick, więc nawet, jeśli wykonamy jakąś
funkcję na naszym onClick'u, to ten button tutaj, o
tym się dowie, ponieważ ten props onClick nie został przekazany
niżej. On w ogóle nie został przekazany do tego komponentu. Dlatego,
bardzo często robi się jeszcze coś takiego. W ten sposób destruktyzujemy
pozostałe props'y, które podajemy do naszego button'a. To może być onClick. To
może być jeszcze coś innego. Wszystko, co nie zostało uwzględnione tutaj,
po imieniu, zostanie zamknięte właśnie w tym props'ie. I teraz,
żeby przekazać te wszystkie props'y, pozostałe, do
naszego button'a, to musimy, po prostu, użyć znanego Ci już
spread operator'a i przekazać właśnie te propsy. I w tym
momencie, kiedy kliknę new item, to powinienem nam się pojawić modal. Zobaczymy, czy miałem
rację. Super, więc skoro otwieranie już
mamy ogarnięte, to teraz wracamy do naszego Route State i sprawdzamy, co możemy
zrobić, żeby zamknąć ten modal. To
również będzie bardzo proste, musimy stworzyć funkcję odwrotną do openModal. Nazwiemy ją
oczywiście closeModal. Ona zawsze będzie ustawiać nasz state na false,
ale tym razem przekażemy ją do
naszego modal'a, closeModalFn, this.closeModal. Przechodzimy
do naszego modala. Zdestruktuzyjemy
sobie naszą funkcję i na
razie stworzymy bardzo prosty button, który po prostu wykona tę funkcję. Sprawdzimy czy
to działa. Super. Zauważ,
że to już jest taki bardzo prosty, generyczny właśnie element button. On
może dostać zwykłego Anglika i wszystko działa, jak należy. I żeby
zaoszczędzić troszeczkę czasu, to ten button, tak jak mamy
w design'ach, zrobię poza tą lekcję. I możemy się też tak umówić,
że w ramach ćwiczenia, zrobisz to samodzielnie, ale oczywiście jeśli
nie chcesz tego robić, to w branch'u, połączonym z następną lekcją, znajdziesz gotowy
kod, który możesz wkleić do swojego projektu.