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.
Kolejnym etapem rozwoju naszej aplikacji niech będzie przedstawienie
tej listy uczestników.
Zobacz, mam tu już dla Ciebie wyeksportowane People jako
właśnie tablica stringów.
Będziemy chcieli użyć tego właśnie do wygenerowania tego, co mamy tutaj.
To jest prototyp.
Natomiast w Bulmie możemy w dokumentacji znaleźć coś takiego jak komponent panel.
Ten komponent posłuży nam właśnie do tego, żeby wyświetlić taką oto listę.
Nie potrzebujemy go aż tak bardzo skomplikowanego, jak jest tutaj.
Wykorzystamy tylko kilka fragmentów z tego, żeby przedstawić to w ten sposób.
Wróćmy sobie do naszej aplikacji.
I tutaj możemy sobie w AppjSx dalej rozważać.
Na przykład możemy sobie tutaj zrobić główne ciało strony i klas
name, które tutaj użyjemy.
To będzie Container.
To jest przygotowanie miejsca na naszą listę.
Tutaj możemy sobie tą listę zrobić właśnie za pomocą panelu.
Ja użyję taki odchudzony panel, czyli po prostu zróbmy sobie jako pożyczony ten
kod, który mamy tutaj w wariancie infocopy.
Jeśli go wkleimy tutaj, powinno to od razu zmienić nam klas na ClassName.
I teraz to co potrzebujemy to jest panel heading.
Nie jest nam potrzebny.
My potrzebujemy zasadniczo tylko element, a jako panel blog, więc zostawmy
to właśnie w takim formacie.
I tutaj będziemy chcieli wyświetlić imię.
Zobacz jak to wygląda.
Mamy jedno imię.
Ten Container można sobie troszeczkę odsunąć.
Czyli to będzie np.
Margin top wynoszący 4, a zobaczymy sobie, że to będzie delikatnie odsunięte.
Przygotujemy sobie też tutaj później tytuł naszej strony, ale to
w dalszej kolejności.
Tutaj chcemy się skupić na tych osobach, które chcemy wyrenderować.
Czyli mamy tutaj tablicę People i chcielibyśmy ich teraz sobie
tutaj sprytnie przedstawić.
Jak moglibyśmy sobie to zrobić?
Otóż jeśli zaimportujemy people tutaj, czyli będziemy to mieli
w takim formacie, Zobacz.
I chcemy sobie tutaj właśnie wrzucić People.
I tu będziemy mieli import people from people.
Na tej zasadzie dostaniemy tablicę stringów i wiemy, że ona będzie
wyrenderowana dlatego, że jest to tablica i będą to text nody, czyli jak gdyby.
Ponieważ jest to tablica i jest to tablica elementów typu string, a elementy
typu string mogą być w czymś zawarte.
JSX rozumie też renderowanie tablicy.
No to w takim układzie możemy to przedstawić w ten sposób.
Natomiast my chcielibyśmy otoczyć każdy z tych elementów tak, żeby wyświetlał
się nam w eleganckiej liście.
Wiemy już o tym, że array możemy mapować, czyli tablica może być mapowana i tutaj
możemy sobie użyć name jako wyciągnięcie jednego name, które mamy w people i
przedstawienie go właśnie w takiej formie.
Tutaj możemy bezpośrednio odnieść się do JSX'a, jednak żeby to ładniej wyglądało,
żebyś zauważył jak to funkcjonuje, ja użyję jeszcze dodatkowych nawiasów
i troszeczkę to zmodyfikujemy.
Tak, żeby było widać co tu się faktycznie dzieje.
I tutaj jak gdyby możemy tego najma. Sobie wrzucić.
Widzimy, że to wszystko działa dlatego, że mamy tutaj.
Ewa, Mark, Krysia, John, Edmund.
I wszystkie te imiona są wylistowane.
Natomiast mamy tutaj jeden błąd and keep top of element iteration.
Czyli mamy tutaj pewien problem, ponieważ podczas iteracji Child list
should have unique prop.
Chodzi tutaj o coś, co możemy zauważyć w dokumentacji React A.
Gdybyśmy tutaj w React dev sobie otworzyli i wpisali key,
zauważysz, że mamy dokładnie ten warning, który przed chwilą nam się wyświetlał.
I tutaj każdy z elementów, który sobie mapujemy musi mieć
unikatowy identyfikator.
Chodzi tutaj o to, że żeby React, który pod spodem używa VirtualDoma i pod spodem
sam ustala co ma nam się odświeżać na widoku, a co nie.
Wiedział i identyfikował jednoznacznie te elementy.
Złym pomysłem, jak się okazuje, jest użycie indeksów.
Nie chcemy używać indeksów jako kluczy dla tych elementów.
Na szczęście każde z tych imion jest unikatowe.
Tak się szczęśliwie składa, że każde z tych imion to unikat.
Każde z ich imion tak samo, więc możemy teraz użyć klucza jako name.
Kluczem mogą być wartości typu string.
Wartości typu number.
Natomiast coś czego nie chcemy robić to np.
Generować tych kluczy randomowo.
Chodzi o to, żeby każdy z tych elementów był jednoznacznie identyfikowany przez
Reacta w momencie, gdy renderuje on te dane.
W momencie, w którym rozpoznaje po prostu jaki element JSX ma
wyświetlać się na ekranie.
Jest to mu potrzebne, żeby optymalnie aktualizować widok.
Możemy tutaj, podobnie jak w tym miejscu, dodać sobie po prostu taki list of
people, czyli tytuł naszej strony.
Ten tytuł to po prostu może być H3, które sobie wpiszemy.
Wtedy możemy sobie tutaj dorzucić List of people.
Możemy to Przenieś sobie tutaj w to miejsce.
I w ten sposób zaczyna nam to coraz to, coraz bardziej przypominać
już ten nasz prototyp.
Możemy sobie tutaj też zrobić jakiś pudding, na przykład wynoszący cztery.
Wtedy elegancko będziemy sobie to mogli wyświetlać.
Czyli tutaj stosujemy klasy do tego, żeby edytować sobie sposób, w jaki
wyświetlany jest nasz widok.
To, co się tutaj wydarza, to people jako tablica stringów jest przemapowane na
tablicę JSX, a ponieważ używamy tutaj array, JSX wie jak poradzić
sobie właśnie z tablicami, no to nie powinno nas dziwić, że to wszystko
nam się tutaj elegancko wyrenderuje.
Więc zobacz, że takie React w odróżnieniu od frameworków, które możesz kojarzyć,
znać innych frontendowych nie korzysta z żadnych dodatkowych elementów ponad to, co
już możemy znać właśnie z programowania funkcyjnego.
Jest to po prostu mapowanie tablicy na elementy JSX.