od Podstaw
5 godz. 59 min · ReactJS · Full-stack i Programowanie
Michał JabłońskiReact przeszedł długą ścieżkę rozwoju i część z jego funkcjonalności nie są już powszechnie używane. Dlatego w tym kursie skupimy się na najnowszych technikach pracy z biblioteką - poznasz współczesne podejście do budowania komponentów z wykorzystaniem hooks (useState, useEffect), zrozumiesz zasady kompozycji i zarządzania stanem aplikacji. Pokażemy Ci też jak efektywnie korzystać z narzędzi deweloperskich, debugować kod i wdrażać aplikacje na produkcję z użyciem współczesnych platform jak Vercel.
Hooki to fundament nowoczesnego Reacta, który całkowicie zmienił sposób tworzenia komponentów. W kursie nauczysz się efektywnie zarządzać stanem aplikacji używając useState, wykorzystywać useEffect do operacji lifecycle i side-effects, oraz poznasz reguły korzystania z hooków. Wszystko to przećwiczysz w praktycznych zadaniach, takich jak implementacja filtrowania listy elementów, gdzie zastosujesz zdobytą wiedzę w realnym scenariuszu.
Obsługa formularzy to nieodłączny element każdej aplikacji webowej. Pokażemy Ci jak kontrolować wartości pól input, wykorzystać popularną bibliotekę Formik do zarządzania złożonymi formularzami oraz implementować walidację danych. Wiedza ta zostanie utrwalona poprzez praktyczne zadanie, w którym rozwiniesz formularz o dodatkowe pola i zastosujesz poznane techniki w rzeczywistym przypadku użycia.
Większość aplikacji wymaga komunikacji z serwerem. Nauczysz się jak poprawnie wykonywać operacje asynchroniczne w komponentach React, obsługiwać stany ładowania i błędów, oraz efektywnie korzystać z klienta HTTP do zapytań AJAX. Zaczniesz od pracy z przygotowanym mockiem API, by następnie przejść do prawdziwej integracji z back-endem. W praktycznym zadaniu zaimplementujesz pełny przepływ danych - od pobrania, przez wyświetlenie, aż po wysłanie na serwer.
Poza budową aplikacji React, w kursie znajdziesz także moduł poświęcony wdrażaniu aplikacji na produkcję. Poznasz prawidłową konfigurację serwera produkcyjnego dla architektury SPA, nauczysz się zarządzać zmiennymi środowiskowymi poprzez pliki .env oraz przeprowadzisz deployment na platformie Vercel. Dzięki temu Twoja aplikacja będzie nie tylko działać lokalnie, ale także będzie gotowa do użycia przez realnych użytkowników w internecie.
Nowoczesny React stworzyliśmy z myślą o osobach, które chcą nauczyć się Reacta i jednocześnie znają JavaScript. Niezależnie od tego, czy React jest Twoim pierwszym frameworkiem, czy masz już doświadczenie w pracy np. ze Svelte czy Vue, ten materiał jest dla Ciebie. Wskazane jest również posiadanie ogólnej wiedzy na temat tworzenia interfejsów z HTML i CSS oraz obsługi narzędzi takich jak Git czy podstawy pracy z terminalem.
Jako zadanie. Podsumowanie.
Do tego modułu w lekcji 25 wrzucam Ci kod, który chciałbym, żebyśmy osadzili na
stronie addPerson, której jeszcze nie ma.
Zobacz, że mamy tutaj elegancko not found 404, ale chciałbym, żeby to
Add person zaczęło nam działać.
Takie jest Twoje zadanie.
Dodaj odpowiednią stronę.
Ta strona ma wyświetlać ten prosty formularz jako zadanie dodatkowe.
Zablokuj możliwość wysyłki tego formularza, bo zobacz, że
działa tutaj button Submit.
Chcemy, żeby to nie było możliwe.
Potraktuj to jako zadanie ekstra, coś dodatkowego, czyli nie chcemy, żeby
formularz zachowywał się natywnie + dodatkowo przy not found 404.
Chciałbym, żebyś poprawił tą ścieżkę, aby ta ścieżka pokazywała jaki jest konkretnie
problem, czyli jaka ścieżka nie istnieje.
Jako inspirację dam Ci tutaj w React router.
W dokumentacji warto poszukać sobie czegoś takiego jak use location, ponieważ to use
location daje nam garść ciekawych informacji.
Możemy sobie zobaczyć, że dostajemy tutaj hasha, key pass name i
tak dalej i tak dalej.
Poczytaj sobie, które dokładnie chcielibyśmy wyświetlać, żeby pokazać jaka
konkretnie ścieżka nie została odnaleziona.
Ok.
Zatrzymaj teraz to wideo i spróbuj rozwiązać zadanie.
Za chwilę rozwiążemy je razem.
Rozwiązanie zadania możemy zacząć od dodania odpowiedniego komponentu w Pages,
czyli tutaj musimy pamiętać o konwencji, że strony jako zespoły widoków u nas,
które osadzają się u nas na routingu, to będą właśnie komponenty typu pages i to
tutaj chcę sobie dorzucić export function add person page.
Dodatkowo chciałbym, żeby trzymać się tej konwencji, czyli page layout jest nam
potrzebne i tutaj w tym Add Person page chcielibyśmy utrzymać ten layout.
Możemy tutaj dodać ten tytuł jako Add new Person i wrzucić sobie ten formularz.
Zauważ, że pomimo tego, że jest on pisany jako class class class, w momencie gdy go
wkleję dostanę tutaj elegancko wszędzie. ClassName.
Przypominam Ci w Visual Studio są też wtyczki do tego, żeby
osiągnąć dokładnie ten sam efekt.
I teraz Add Person page oczywiście musi być osadzony w naszym routingu.
Dodaję sobie router.
I tutaj jest jeszcze jedna rzecz.
Chcę tą ścieżkę umieścić sobie przed tą ścieżką z gwiazdką, bo ta ścieżka z
gwiazdką wyłapie mi element za wcześnie i nie będę w stanie wtedy
przejść do Add person page.
A teraz chcę, żeby ten segment był obsługiwany jako ad person i
zobacz, mamy tutaj ad new person.
Mamy tutaj ten formularz.
On się już nam elegancko wyświetla i widzimy, że wszystko działa poprawnie.
Trzymamy się tych konwencji, której się do tej pory nauczyliśmy.
Teraz formularz.
Jeżeli ja tutaj cokolwiek wpiszę i kliknę na Ad, to zobacz, że on się przesyła.
Jak gdyby nie dostaję tutaj nic, bo gdybym chciał, żeby natywnie obsługiwany był w
HTML formularz, musiałbym mieć pole name.
Czyli gdybyśmy tutaj zrobili sobie jako name.
No akurat wychodzi tak dziwnie, że name to po prostu name.
Dodam personname, żebyśmy widzieli jak to działa.
To teraz jeżeli ja sobie kliknę Ad to dostaję tutaj w query
paramsach person name.
Gdybym coś tutaj wpisał np.
Test i kliknął ad.
To widzimy, że to tutaj jest wrzucane, ale dalej nie rozwiązuje to problemu.
Jak gdyby nie chcę, żeby to nawet tak działało.
Chciałbym, żeby po prostu strona się nie odświeżała.
W momencie, gdy ja klikam add.
Strona się odświeża, co znaczy, że gubię stan.
Nie do końca o to mi chodzi pisząc aplikację SPA.
Dlatego tutaj w forum chciałbym dorzucić submit i tutaj będzie event
jako event preventDefault.
Zobacz, że taki zapis wystarczy w czyściuteńkim JavaScripcie do tego,
żeby zapobiec wysyłce formularza.
Spróbujmy wejść do tego Add person.
Czyli mamy exchange. Wchodzimy.
Add person.
Chciałbym sobie coś dodać i tutaj w Add widzimy, że przestało to działać.
Czyli generalnie jest dobrze, dlatego, że ja będę chciał sobie odczytać wartość tego
formularza i sam kontrolować co jest wysyłane i w jaki sposób będę chciał to
zrobić za pomocą na przykład jakiegoś klienta HTTP.
Może to być zwykły fetch.
Będziemy komunikować się z API i wtedy wysyłać.
Jeśli chodzi o 404, czyli zobaczmy sobie na przykład ad person2.
Mamy tutaj not found 404, ale niewiele informacji dostajemy.
Jaka ścieżka konkretnie nie została odnaleziona.
Spróbujmy więc przejść sobie teraz do tej 404, którą mamy też w routeri
zamiast tutaj Page Layout.
Zróbmy sobie konkretną, dedykowaną stronę.
Czyli tutaj będziemy mieli new.
I znowu JavaScript JSX file i nazwę sobie to jako not found page.
Mamy export function not found page.
Pożyczymy sobie, bo to jest dobry pomysł ten page layout.
Tutaj z kolei podmieńmy to na not found page.
Mamy not found 404.
Zamknijmy page layout i poinformujmy użytkownika co takiego się stało.
Może to być jakiś warning. Znowu.
Ok, mamy tutaj URL i ten URL to będzie.
Musimy sobie odczytać coś z właśnie use location.
Dokładnie nazwę tego URL będzie miał pass name, czyli pass name.
Nam wystarczy do tego, żeby określić jaka ścieżka nie została odnaleziona.
Możemy sobie to jeszcze dodatkowo przystroić.
I mamy page request is not found na tej zasadzie.
I to jest nasz kompletny widok 404.
Widzisz więc, że możemy odczytać wszelkie informacje na temat ścieżki.
Co więcej, podsumowując całość tego modułu widzimy, że na Exchange
page możemy odczytać również stan z naszego routera i na podstawie tego
stanu wykonać jakieś działanie.
Jednak pamiętajmy o tym, że docelowo dla tej konkretnej aplikacji lepiej by było
nam użyć jakąś bibliotekę stanu globalnego.
I te nasze pary exchange, czyli to nasze party, które sobie tutaj zaczynamy i to, w
jaki sposób są wylosowane Te pary chcielibyśmy przetrzymywać w jakimś
globalnym mechanizmie stanu, który może być po prostu kontekstem, czyli
może być to Context API dla React.
Jednak jest to już bardziej zaawansowany temat, który wykracza
poza zakres tego kursu.
Ale tutaj, jeżeli chcesz rozwijać dalej tą aplikację i bawić się nią, to
zwracam Twoje oczy w tym kierunku.
Podsumowując dalej to co się tutaj wydarzyło mamy poza tym add
personpage i dodanie tego do routingu.
W takim wypadku Pass ad person daje nam możliwość, żeby osadzona została strona ad
personpage i mamy to w tej konfiguracji routingu.