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.
Zwróć uwagę, że teraz, żeby poprawnie działał nasz projekt musimy
mieć otwarte i backend i dev.
Za chwilę połączymy się z backendem.
Będziemy do tego używać biblioteki, która nazywa się Axios, czyli
Promise Base HttpClient.
Warto sobie jakiegoś klienta zainstalować do naszej aplikacji,
dlatego, że upraszcza on diametralnie połączenia i wykonywanie takich
standardowych requestów, które mamy na porządku dziennym do właśnie Backend
API, takich jak post, takich jak Get.
Zobacz, że bardzo, bardzo przyjemnie będzie nam się z tego korzystało.
To jest promise based, więc będzie to bardzo, bardzo podobne do tego co mamy.
Pamiętajmy jednak, że teraz zmienią się nasze dane dlatego, że
obsługujemy name oraz ID.
Spróbujmy się połączyć i spróbujmy teraz zmienić naszą koncepcję.
Dlatego, że od tej chwili będziemy musieli po prostu wyłuskiwać sobie tutaj te
imiona, Dlatego, że będziemy pracować na obiektach, a nie jak do tej pory
na właśnie takiej tablicy stringów.
Spróbujmy w takim wypadku dorzucić sobie tu coś takiego jak services i od
razu przygotujmy to poprawnie.
Czyli tutaj będziemy mieli coś, co jest JavaScriptem.
Jako PeopleServiceJS ten mój PeopleService to będzie po prostu taki globalny
singleton, który można sobie zaimportować w dowolnym miejscu i oczywiście będzie on
operował tymi elementami, które mieliśmy tutaj.
Czyli mamy tutaj get people, add person, możemy sobie porobić właśnie tego typu
funkcje tutaj Get people, add person i tutaj zastosujemy acciosa, czyli tu
będziemy łączyć się z tym localhost 3000 people za pomocą Acciosa zainstalujmy go
sobie w projekcie, czyli npm install acsos i potrzebujemy go sobie stąd
zaimportować, czyli import ACS from ACS.
I tutaj nasz base URL dla instancji acciosa to niech będzie localhost 3000
i możemy to sobie złamać na peoples.
I ta nasza ACS instance, czyli nazwijmy to sobie ACS instance będzie
miała po prostu get.
Jeśli chodzi o People, możemy sobie to przenieść w ten sposób.
Będzie to troszeczkę bardziej intuicyjne, że tutaj uderzamy na endpoint people.
Dlatego baseURL to Access instance.
Docelowo w aplikacji, którą chcielibyśmy rozwijać, mogłoby być w
zupełnie innym miejscu.
No i tutaj uderzać do naszego backendu.
Zobaczmy sobie, czy to People service get people w ogóle działa.
Czyli spróbujmy sobie to odebrać w naszym komponencie.
Wróćmy sobie tutaj do Pages i mamy tutaj People page.
Widzimy, że tutaj ładujemy sobie dane i w ten sam sposób będziemy chcieli się
odnieść do właśnie People Serwis Get People.
Spróbujmy sobie to przedstawić jako consolelog.
I tutaj await get people.
Zobaczmy czy to w ogóle działa.
People Serwis oczywiście importujemy sobie z tego co przygotowaliśmy przed chwilą.
Actions jest zainstalowany.
Zobaczmy sobie pod F12 co tu jest w konsoli.
Widzimy, że data przychodzi do nas, czyli musimy to sobie opakować
jeszcze z data i data.
To jest 5 tutaj naszych obiektów, które chcielibyśmy dostarczyć.
Czyli mamy await get people i tutaj musielibyśmy sobie jeszcze
opakować to jako data.
Spróbujmy zrobić to sobie w ten sposób.
I teraz przesuńmy to do swojego stanu.
I tutaj get people mamy to Lowercase is not a function.
To się wszystko zgadza, dlatego, że teraz people musimy wszędzie poprawić.
Dlatego, że tam gdzie korzystamy z People nie będziemy mieli name, tylko
będziemy mieli już obiekt.
Ten obiekt w przypadku na przykład filter people będzie miał tutaj name.
W ten sposób, czyli tutaj poprawiamy sobie people filter.
Dalej powinniśmy sobie people poprawić tam gdzie mamy jedną osobę, czyli tutaj
filter people to nie będzie już name.
Gdybyśmy chcieli korzystać z name, to troszeczkę inaczej by to wyglądało.
Natomiast zobacz, że tutaj możemy sobie rozpakować ID oraz name.
I teraz klucz to niech będzie ID i tutaj będziemy sobie przekazywać
name is selected.
Czy chcemy sobie jako selected przekazywać ID?
Niekoniecznie możemy sobie przekazywać name y tak żebyśmy od razu
dostali informację zwrotną.
Czyli to handle select niech dalej operuje nam name ami, czyli nie zmieniajmy na
razie tej funkcjonalności i zobaczmy sobie, że wszystko działa poprawnie.
Spróbujmy sobie coś zmienić na naszym backend tak, żeby zobaczyć, czy
to faktycznie działa poprawnie.
Dodajmy sobie chociażby jedną osobę z nowym numerkiem IT.
Załóżmy coś takiego.
I teraz, jeżeli sobie odświeżymy, to widzimy, że Roman jest tutaj z nami, więc
generalnie wszystko działa poprawnie.
W momencie, w którym dodajemy sobie te osoby i uderzamy do start party, wszystko
jest w porządku, dlatego, że tutaj dostarczamy to właśnie za
pomocą zauważ po prostu imion.
I zobaczmy jeszcze czy wyszukiwanie działa.
Mark jest ok.
Roman ok.
Widzimy, że wszystkie nasze funkcjonalności działają poprawnie.
Więc bardzo, bardzo minimalnym kosztem dorzuciliśmy sobie backend.
Co więcej, dorzucamy sobie Axiosa, który jest biblioteką, która gwarantuje Ci, że
nam się zwróci, chociażby dla przykładu użycia tak zwanych interceptorów.
Ta biblioteka to obsługuje.
Tutaj możemy sobie dalej rozwijać te nasze kolejne, kolejne elementy,
jak na przykład Add Person.
Za chwilę sobie do tych rzeczy przejdziemy i tutaj jak gdyby będziemy sobie mogli
właśnie w ten sposób rozwijać kolejne Serwisy i pytać o backend, o dane.
Mamy tutaj 1 backend na porcie 3000.
Docelowo chcielibyśmy podmienić to localhost 3000.
Powiemy sobie o tym już w momencie, gdy będziemy starali się robić
deployment aplikacji.
Dlatego, że wtedy nie możemy iść do localhost 3000.
W momencie, gdy będziemy robić produkcję dlatego, że użytkownik nasz końcowy nie
ma wystawionego serwera na porcie 3000.
My to mamy oczywiście dla potrzeb deweloperskich.
U nas teraz od zawsze będziemy chcieli, żeby działało.
Dev działało backend.
Jeśli backend nie zadziała, zwróć uwagę, że mamy taką pustą listę, natomiast mamy
informację zwrotną, że jest jakiś access error.
Można sobie dorzucić obsługę tego erroru, czyli można sobie zaprojektować jak byśmy
chcieli tutaj poinformować użytkownika o tym, że jest problem i nie udało
nam się połączyć z serwerem.
Natomiast na ten moment przeszliśmy do obsługi właśnie serwerowej.
Jeśli cokolwiek dopiszemy w JSON i wystawimy serwer, jesteśmy w stanie to
ściągnąć i kosztowało nas to zasadniczo zmiany w dwóch miejscach w naszym kodzie.