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.
Kontynuujemy budowanie takiej podstawowej struktury pod naszą aplikację,
do której za chwilkę przejdziemy. Musimy tylko przenieść ten komponent App
do osobnego pliku, ponieważ tego wymaga konwencja, której
używamy w React'cie. Wytnijmy więc cały ten kawałek. Oczywiście
w oknie przeglądarki pojawi nam się błąd. Tym się na razie nie przyjmujemy,
stworzymy nowy plik o nazwie App.js, do
którego wkleimy zawartość naszego komponentu i tutaj musimy
pamiętać o dwóch rzeczach. O tym, że musimy zaimportować React'a
oraz o tym, że ten komponent musimy wyeksportować,
żeby następnie móc go zaimportować. Podobnie jak, na przykład, React albo React DOM
do pliku index.js i wydaje
mi się, że to jest dobre miejsce, żeby wytłumaczyć jak działają export'y, import'y w ES Modules
i nazywam je celowo ES Modules, ponieważ możesz się spotkać
w JavaScript'cie jeszcze z takimi importami, ale
tym się w tym kursie na razie nie będziemy zajmować, bo taki rodzaj importów nazywamy CommonJS. Natomiast
tego rodzaju importy weszły razem z wersją ES6. Natomiast nie
są częścią dokumentacji ES6 i nazywają się po prostu ES Modules, czyli
ECMAScript Modules. Chcę ci to teraz wytłumaczyć, ponieważ kiedy ja zaczynałem
karierę programisty, to pamiętam, że sprawiało mi to dość spory problem, żeby zrozumieć czym
się różni taki import od importu, który ma takie klamry,
bo z nim również się możemy spotkać. Zasada
jest tutaj bardzo prosta. Wystarczy to sobie poukładać w głowie. W JavaScript'cie mamy
dwa rodzaje export'ów. Pierwszy z nich, to tak zwany Named Export
i polega on na tym, że możemy każdego const'a, każdą
funkcję, każdą zmienną w naszej aplikacji wyeksportować
w taki sposób i wtedy jeśli chcielibyśmy to zaimportować w innym pliku, musimy
użyć właśnie takiego zapisu, z klamrami. Jak
widzisz wszystko działa i ten export nazywa się Named Export, ponieważ
zawsze używamy takiej samej nazwy zmiennej,
jaką eksportowaliśmy, czyli jeśli tutaj nasza zmienna nazywała się
App to importujemy ją również jako App. Jeśli
chcielibyśmy, żeby ona nazywała się jakoś inaczej, to możemy to zrobić podczas
importu, robiąc
taką operację i w tym momencie wykorzystujemy
to w taki sposób i to również działa, czyli poprzez słowo
klucz as, możemy zmienić nazwę zmiennej, którą importujemy
z innego pliku, ale warto na tę chwilę zapamiętać, że Named Export wymuszają
użycie klamry podczas importu oraz wykorzystanie
takiej samej nazwy zmiennej, jaką eksportowaliśmy z naszego pliku. Co
ciekawe takich Named Export'ów w naszym pliku JS może być kilka. Załóżmy,
że chcemy sobie tutaj zrobić const'a name, którego
później zaimportujemy w naszym index.js Możemy to
zrobić po przecinku w nawiasach klamrowych, jeśli importujemy z tego samego pliku. Następnie, jeśli
na przykład zrobimy sobie tutaj console.log'a, to
zobaczymy, że w naszej konsoli ten Roman się pojawi, czyli
taką dodatkową zaletą Named Export'ów jest to, że możemy ich mieć kilka w
jednym pliku. Przydaje się to w momencie kiedy, na przykład, tworzymy sobie plik
utils.js, gdzie trzymamy jakieś przydatne narzędzie, jakieś funkcje,
które pomagają nam później w aplikacji, które wykorzystujemy wielokrotnie do
wykonywania jakiejś operacji. Wtedy takie utils'y właśnie trzymamy
sobie jednym pliku JS. Jest to mega fajne. Okej, a teraz
przejdźmy do konwencji, którą zazwyczaj się stosuje kiedy eksportujemy
komponent w React'cie. Mówię tutaj zazwyczaj, ponieważ do dzisiaj istnieją z spory, czy
warto eksportować komponent jako Named Export, czy właśnie Default
Export, które pokażę ci teraz. Żeby wykonać
Default Export, jedyne co musimy zrobić to wpisać export default
i nazwę zmiennej, czy też const'a, które
eksportujemy. Następnie w pliku index.js
importujemy to, podobnie jak przykład React'a, czyli
jak DOM. W taki
sposób. Jak
widzisz, wszystko działa i w export default mamy dwie ciekawe sprawy. Pierwsza
jest taka, że eksportując coś z takiego pliku możemy mieć tylko jeden export
na cały plik. To znaczy, że jeśli mielibyśmy jakiegoś innego const'a, na przykład name,
to nie moglibyśmy wykorzystać export default, ponieważ
zostałby on po prostu zignorowany. Liczy się tylko jeden, a drugą
ciekawą rzeczą jest to, że skoro mamy tylko jeden export i eksportujemy
tak naprawdę jedną jedyną rzecz z takiego pliku,
to nie obowiązuje nas już ta zasada, gdzie
musimy wykorzystywać dokładnie taką samą nazwę, jaką
miała nasza zmienna, czyli na przykład, jeśli tutaj mielibyśmy AppComponent, to
tutaj mimo tego, że nadal importujemy tylko App, a nie AppComponent,
to wszystko nam działa. Tak naprawdę
w tym miejscu moglibyśmy użyć obojętnie jakiej nazwy i
jak
widzisz, każda nazwa działa i to też jest bardzo fajne w export default'owych,
że możemy używać jakiejkolwiek nazwy, bo czasami te nazwy
po prostu wygodniej jest podmienić. Są takie przypadki, nie robi się tego zbyt
często i nie zachęcam cię do tego, ponieważ to musi mieć swoje uzasadnienie. Natomiast warto
wiedzieć, że nie jesteśmy tutaj jakby zobligowani do tego, żeby używać dokładnie
takiej samej nazwy zmiennej. Wróćmy więc do prawidłowej konfiguracji. Nazwijmy
wszystko tak jak trzeba. Stosujmy się do konwencji, ponieważ
w tym wypadku nie musimy tego nazywać żaden sposób inaczej. Usuńmy
jeszcze to i tak
przygotowana struktura aplikacji jest gotowa żebyśmy mogli zacząć z nią pracować. Lecimy
dalej.