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.
Często jest tak, że w naszej aplikacji spotykamy potrzebę tak zwanych
dynamicznych parametrów do naszego routingu.
Wyobraźmy sobie następujący przykład.
Chciałbym po kliknięciu w imię danej osoby poczytać trochę więcej na jej temat.
Wiem, że teraz jeżeli kliknę tutaj to selectujemy osoby i to jest ta
funkcjonalność jak najbardziej jest nam potrzebna, ale chciałbym po kliknięciu
w imię dowiedzieć się czegoś więcej.
I teraz możemy sobie wyobrazić, że będzie to mnie odprowadzało do zupełnie innej
strony, gdzie mogę coś poczytać na temat Ewy, Marka czy Krysi?
Zobaczmy sobie w panel bloku.
Musimy sobie dodać coś, co pozwoli nas przenieść jak gdyby do tej strony,
która by dotyczyła tych informacji.
Użyjemy do tego linka.
Tutaj akurat nie ma w linku, dlatego, że nasz link posłużyłby nam do tego, żeby
wiedzieć, która ścieżka jest aktywna, więc linki idealnie nadają się do tego, żeby
być właśnie jakimś tam elementem menu.
Natomiast tutaj chcemy sobie złożyć ścieżkę i zaraz to zrobimy.
Na przykład może być to person.
I tutaj dorzucam sobie zobacz, że składam to normalnie ze stringa.
Dlatego użyłem tutaj znaków basica i to jest po prostu czyściuteńki JavaScriptcik,
czyli tak zwany template string.
Z JavaScriptu dorzucam sobie po prostu name jako kolejny segment
do tego co mamy tutaj.
Mamy person name i tutaj name wrzucam sobie i ten link powinien zacząć działać.
Zobacz, że mamy tutaj person. Ewa.
Co więcej router zauważ działa nam poprawnie pod tym względem, że ja
mogę wrócić do poprzedniego widoku.
Czyli tutaj jak gdyby ta historia jest w przeglądarce zawarta.
Więc za każdym razem, jeżeli ja klikam w link, to tak zwany pushstate, czyli
wrzucenie kolejnego stanu routera jest w przeglądarce przechowywane.
Co za tym idzie to jest bardzo dobry user experience, dlatego że user może też sobie
nawigować przeglądarką, jeżeli coś pójdzie nie tak.
No i tutaj oczywiście mamy błędy typu 404 not found i sugestie,
żebyśmy użyli error boundary.
Zamiast tego polecam Ci zrobić troszeczkę inną rzecz.
Można oczywiście użyć error mądry.
Natomiast my użyjemy do tego przechwytywanie wszystkich ścieżek,
czyli błąd 404 obsłużymy sobie jako path.
I tutaj możemy podać wildcard, czyli każda inna ścieżka, każda
nierozpoznana ścieżka da nam element.
I teraz dla przykładu wrzućmy sobie po prostu taki page layout, gdzie będziemy
mieli po prostu informację, że coś nie zostało odnalezione.
I na razie sprowadzimy się tylko do tego, czyli mamy not found 404.
I zauważ, że teraz, jeżeli klikniemy sobie w dowolną z tych ścieżek, to
dostajemy taki właśnie błąd.
No ale to nie jest rozwiązanie naszego zadania.
Chcielibyśmy, żeby po person i tutaj imię tej osoby dostać więcej
informacji na jej temat.
No i zobacz, że dynamicznym segmentem jest w tym przypadku name.
Name może być dowolne, dlatego, że zależy od naszych danych, zależy od name,
które jest przesłane do bloku.
To z kolei jest zależne od tego filter people.
A filter ID people jest zależny oczywiście od naszej tablicy people, czyli tego, z
czego wyszliśmy tutaj na samym początku, jeśli chodzi o nasze dane do aplikacji.
W takim układzie możemy to sobie rozwiązać w następujący sposób.
Dodajmy sobie ścieżkę, która będzie obsługiwała właśnie coś takiego jak person
i tutaj będziemy mieli dynamiczny segment person name.
W takim układzie możemy tutaj page layout title dorzucić sobie coś takiego jak
Person Info i zobaczyć czy działa to poprawnie.
Mamy już Person info i zobacz, że jak gdyby ten dynamiczny segment może
reprezentować dowolną wartość.
Zarówno John jak i Not Existence będzie poprawne dlatego, że nie jest to
walidowane pod kątem jakichkolwiek danych.
To jest po prostu string, który możemy sobie właśnie złapać na tym page layoucie.
Spróbujmy to zrobić w całości poprawnie, czyli dodajmy page taką
jak Person info jako JSX.
Przerzucimy sobie ten page layout jako personinfo.
A tutaj zwróćmy element PersonInfopage.
Chcielibyśmy mieć możliwość załadowania informacji na temat danej osoby.
Można sobie wyobrazić, że tutaj moglibyśmy zapytać np.
Backend.
W takim wypadku tutaj zróbmy sobie jakieś notification z info isLife.
Zasymulujmy sobie tutaj jakiś preloader + dodatkowo chcemy odczytać
właśnie ten dynamiczny segment.
Chcielibyśmy ten dynamiczny segment odczytać sobie tutaj, żeby móc w momencie
załadowania tego komponentu zacząć ładować dane.
W tym wypadku użyjemy Hooka UseParams, który jest właśnie dedykowany
dla takiego przypadku.
Wiemy, że parametry, które dostaniemy to będzie Personname.
Mogę Ci na razie pokazać wszystkie parametry, ale zobaczysz, że ta nazwa,
którą ustaliliśmy sobie tutaj jest nieprzypadkowa.
To znaczy będziemy w PersonInfoPage mogli użyć tej nazwy pod Params.
Spróbujmy sobie to Params wrzucić tutaj poniżej jako JSON StringParams.
Pamiętaj, że nie możemy wrzucać obiektu i zobacz, że dostajemy tutaj PersonName.
To w jaki sposób jest nazwany ten segment ma znaczenie, bo jeżeli nazwiemy go sobie
tylko name, to name dostaniemy tutaj.
Jeżeli to będzie pinname to będziemy dostawać tutaj pi name jako parametr.
I tutaj oczywiście wrzucimy personName.
Wrócimy do tego jak to było na początku. Więc mamy person.
Ewa i to Ewa.
Jesteśmy w stanie tutaj sobie wyłuskać.
W takim wypadku możemy tutaj loading data about i wrzucić sobie tutaj
zrestrukturyzowane personname.
I teraz możesz sobie wyobrazić, co będziemy robić dalej.
Gdybyśmy chcieli faktycznie ładować dane.
Nie mamy co prawda żadnego źródła, z którego możemy to zrobić, ale teraz
będziemy mieli tutaj loading data from backend.
I oczywiście jest to zależne od dependency personname.
Czyli zobacz, że za każdym razem, jeśli personname się zmienia, tutaj
będziemy mieli loading data.
Jeśli chcemy, żeby preloader nam się usunął, czyli po jakimś czasie chcemy
sobie załadować te dane, moglibyśmy sobie zrobić loading jako use state.
I tutaj odświeżyli byśmy po Settimeout'cie.
Jest loading.
Załóżmy, że zaczyna się od wartości true i tutaj odczekujemy półtorej sekundy, a
tutaj robimy sobie renderowanie warunkowe.
Jeśli jest loading, to wtedy pokazuj nam preloader i będziemy mieli loading data
about eva i po półtorej sekundy to znika.
Możemy to sobie oczywiście zwiększyć, na przykład do trzech sekund.
Natomiast tutaj się zatrzymam z tym przykładem.
Moglibyśmy sobie załadować coś z backendu i widzisz, że to działałoby poprawnie.
Byłoby zależne od personname, czyli tego parametru, który tutaj mamy.
Jeśli ten parametr się zmieni, jeśli byśmy wrócili i kliknęli jakąś inną osobę,
to zobacz, że działa to poprawnie.
I w ten sposób właśnie mamy dynamiczne parametry.
Czyli z jednej strony nazywamy ten parametr, a z drugiej strony odbieramy w
danym komponencie, który chciałby z niego skorzystać.
Jako UserParams z React router dom.
To juz parametr pozwala nam odebrać parametry, które sobie założyliśmy.
Oczywiście ich może być kilka.
Zauważ, że tam możemy sobie dodać kolejny, kolejny segment, gdybyśmy potrzebowali.
Wtedy oczywiście ta ścieżka przestanie działać.
Dlatego, że nie spełniamy tego warunku.
Musielibyśmy tutaj dodać jeszcze jedną rzecz, żeby spełnić ten warunek, czyli
żeby ta ścieżka miała dwa dynamiczne segmenty na przykład.
Więc ta ilość dynamicznych segmentów jest dowolna.
Każdy z nich powinien po prostu nazywać się inaczej, natomiast możemy sobie
ich zdefiniować tutaj dowolną ilość.