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 już wiemy jak wykorzystywać context naszej aplikacji, a przynajmniej znamy
takie podstawy, to teraz możemy zacząć przygotowywać naszą aplikacje
do tego, by odpowiednio właśnie korzystała z Provider'a, z Consumer'ów i ze state'u,
który będziemy tutaj podawać. Jak widzisz, właśnie podmieniłem value na cały state,
ponieważ to z niego będziemy korzystać przez cały dalszy czas trwania
tego kursu, a przy okazji stworzyłem taki krótki plan, żebyśmy się nie zgubili, żebyśmy
wiedzieli, jakie kolejne kroki musimy podjąć, żeby nasza aplikacja zaczęła
wyglądać tak, jak chcemy, żeby wyświetlała Twitter'y, artykuły i notatki, w poszczególnych
kategoriach. Plan wyjątkowo jest po polsku. Nie widziałem sensu, żeby
pisać go po angielsku i pierwszą pozycję w naszym genialnym planie, jest
usunięcie initialStateItems. Nie będą nam więcej potrzebne. Przygotujemy
nasze komponenty w taki sposób, żeby wyświetlały jakąś fajną wiadomość. Kiedy nie będzie,
po prostu, żadnego elementu do wyświetlenia,a przy okazji usuniemy pustą
tablicę z items. Zastąpimy ją obiektem i wewnątrz
stworzymy twitters, articles oraz
notes. I to
będą nasze tablice, na poszczególne notatki. I skoro
to już mamy gotowe, to teraz możemy sprawdzić, co mamy pod drugim punktem naszego planu.
A mamy przywrócenie funkcjonowania add item, bo jak
teraz sobie spojrzymy, to nasz form, który wykorzystywał wcześniej metody add item -
jest teraz zagnieżdżony w modalu, więc nie ma bezpośrednio dostępu
do tego, co znajdowało się w tej funkcji. Jeśli nawet spróbujemy sobie coś
tutaj dodać, to
strona nam się przeładuje, query string zostanie dodany do naszego paska adresu, ale
żaden element się nie doda do state'u. Nic właściwie co wcześniej robiliśmy się
nie wykona, więc musimy przywrócić funkcjonowanie temu wszystkiemu i tym się
teraz zajmiemy. Przy okazji zaplanujemy sobie kilka ruchów naprzód, ponieważ
oprócz tego, że będziemy robić add item, w naszym formularzu, to
chcemy jeszcze pobierać elementy Twitter'ów, artykułów i
notatek do poszczególnych kategorii. I to też będzie wrzucane naszego Providera. To
też będziemy wykorzystywać naszym context'cie, więc usuniemy teraz ten name, który
jest nam już niepotrzebny. Tutaj też go wywali my i teraz, żeby przekazać
zarówno nasz state, który będzie potrzebny w kontekście, jak i metodę, którą
będziemy wykorzystywać w naszym formie. Musimy skonstruować sobie taki obiekt,
który skomponujemy sami. Możemy go nazwać contextElements
i wewnątrz niego, za pomocą spread operator'a, wrócimy
sobie this.state, czyli ten obiekt, który mieliśmy tutaj,
zostanie włączony do tego elementu contextElements.
Pamiętaj, że spread operator w obiektach, w normalnym JavaScript'cie,
takim czystym, jeszcze nie jest dostępny, ale z racji, że korzystamy z Create React App,
który ma odpowiednie skonfigurowanego Babel'a, to możemy wykorzystywać już sobie właśnie
spread operator w obiektach. A drugim elementem będzie addItem i tutaj
odnosimy się do this.addItem, czyli do tej funkcji, którą mamy w
tym miejscu i kiedy nasz contextElement już jest odpowiednio skomponowany, to teraz
możemy go przerzucić tutaj - do naszego value, w context'cie, na
potrzeby przetestowania tego, czy nasza funkcja w ogóle będzie działać. Zakomentujemy
sobie wszystko, co tutaj mieliśmy. Zostawiłem tylko preventDefault, żeby nie
przeładowywało nam strony i tutaj
jeszcze krótkie słowa wyjaśnienia, bo moglibyśmy teoretycznie te
funkcje, tak jak poprzednich działach tego kursu, podać do modala
jako props'a i później w modalu, jak sobie go otworzymy, moglibyśmy
podać tutaj, moglibyśmy zdestrukturyzować tego props'a, te funkcje i
podać ją jako props'a znowu niżej do form'a. Tylko, że takie
wodospadowe podawanie props'ów nie jest najlepszą praktyką i w
ostateczności prowadzi do tego, że bardzo łatwo możemy zapomnieć, gdzie, który
props został podany. Możemy gdzieś, coś przypadkowo usunąć. Narażamy
naszą aplikację na błędy, więc tym sposobem, używając context,
pozbywamy się tych pośrednich stepów i możemy w ten
sposób, korzystać z pewnych zasobów, w dowolnym miejscu, w naszej
aplikacji - po prostu odpalając Consumer i pobierając wszystko, co wrzucamy
tutaj, Provider'a. Oczywiście nie jest to rozwiązanie uniwersalne
i nie można tego traktować jako panaceum na wszystkie problemy związane
z podawaniem props'ów, ponieważ bywają takie sytuacje i
zazwyczaj tak jest, że dobra konstrukcja komponentów zapobiega
nadmiernemu wykorzystywanie context'u. Tutaj, po prostu, wszystko przychodzi
z doświadczeniem. Trzeba tego wszystkiego popróbować, a przede trzeba to zrozumieć, więc
teraz już nie przedłużając, sprawdzimy czym w ogólem nasza funkcja
addItem już działa, już w form'ie. Przejdźmy teraz do form'a, zaimportujemy
sobie nasz context, tak
jak to mieliśmy w poprzednim przykładzie. Opleciemy
wszystko w AppContext.Consumer i
tak
jak już pokazywałem w poprzednim przykładzie, musimy otworzyć wrota naszego teleportu. Wykonując,
po prostu, funkcje strzałkową, gdzie podajemy parametr context. Wklejamy nasz JSX i
teraz, żeby podmienić te funkcje, które mieliśmy
wcześniej, onSubmit, this.props.submitFn, która już nie istnieje. Musimy
teraz tutaj, po prostu, wrzucić context.addItem, ponieważ
to ona znajduje się w naszym obiekcie, który przesłaliśmy - na Providerze. I jeśli
nasz teleport działa, to nasza funkcja, po wysłaniu
formularza, powinna zadziałać. Chwila prawdy... Wszystko
gra. Znamy nasz teleport, który działa. Wróćmy sobie do naszego
root'owego elementu. Przywróciliśmy
funkcjonowanie addItem. Póki co, ona nic nie robi, ale tym zajmiemy się
już w kolejnej lekcji. A w tej lekcji to na tyle. Udało nam się prawidłowo skonstruować
obiekt, który podajemy do naszego context'u. Zawiera on nasz stan
i naszą funkcje addItem, którą wykorzystujemy w form'ie. Dobra
robota, ale przed nami jeszcze sporo ciekawej pracy, bo w następnej lekcji zajmiemy się przygotowaniem inteligentnego
formularza. Brzmi ciekawie.