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.
Rozważmy sobie pewien problem.
Co by było, gdybyśmy chcieli po kliknięciu zamiast otwierać nowej strony,
zamiast przeładowywać wszystkiego?
Chcielibyśmy, żeby to Personinfo pokazywało się tutaj z prawej strony,
czyli po kliknięciu dostaje z prawej strony personinfo.
Rozwiązanie tego problemu to tak zwany child routing.
To znaczy musimy sobie wyobrazić, że w tym układzie musimy przejść do PeoplePage i
tam dorobić sobie pewną funkcjonalność.
To znaczy chciałbym mieć teraz widok podzielony.
Fajnie by było, gdyby był responsywny.
Jeśli chodzi o bulmę, to mamy coś takiego jak ClassName columns i jeżeli to jest
desktop to byśmy chcieli to podzielić kolumnowo, natomiast jeśli nie, to
może to być kolumna pod kolumną.
Tak to sobie zróbmy.
To znaczy tutaj gdybyśmy mieli dwie kolumny, to ta pierwsza kolumna będzie po
stronie lewej, ta druga po stronie prawej, więc jeśli weźmiemy sobie, przeniesiemy
ten nasz widok, a tutaj będziemy mieli jakiś inny,
to w przypadku mobilnym będzie jedno pod drugim, a w przypadku, gdy rozciągniemy
swoją przeglądarkę, no to już jest ciekawie, dlatego, że tutaj
będziemy sobie coś przeładowywać.
Czyli mamy już graficznie zrobiony placeholder na to, żeby
tutaj coś zmieniać.
No i tutaj musi być kolejny outlet.
Ten outlet spowoduje, że w środku tego people page mamy kolejny element,
który spodziewamy się osadzić.
I spróbujmy teraz troszeczkę przepisać nasz routing.
To znaczy teraz było tak, że wchodzimy na Person i Person name.
Spróbujmy sobie to zrobić troszeczkę inaczej na ścieżce People
i tutaj będzie Person name.
Dostaniemy People Page faktycznie, ale Person name będzie obsługiwany teraz
przez Children, więc wyobraź sobie children zawsze jako
coś, co będzie osadzone na outlecie tego elementu, który masz tutaj.
Zobacz, że to samo obowiązuje przy app przy app.
W outlecie tego app mamy wszystko to, co jest w children, a w People Page
dorzuciliśmy sobie nowy outlet, czyli tutaj mamy ten outlet i to wszystko, co
jest w Children będzie osadzone właśnie w tym miejscu, w People Page, w tym outlecie
będziemy sobie osadzać ten element i ten element, który chcemy tutaj sobie zrobić,
to będzie po prostu personname i to personInfopage, czyli zobacz, zostawiamy
ten dynamiczny parametr, a tutaj zostawiamy sobie people.
I teraz zmieńmy sobie troszeczkę linki.
Jeżeli byśmy zostali przy tych czyli to person personname, no
to mamy osobną stronę.
Natomiast jeżeli zmienimy sobie to na people i tutaj będziemy dawać name, to
zobacz, że to powinno nam się otworzyć tutaj.
Być może chciałbyś zrobić sobie dedykowany komponent, który nazywałby się People
Detail albo Person detail, gdzie nie mielibyśmy tego tytułu i
gdzie ładowalibyśmy rzeczy.
Zrobilibyśmy bardzo podobną logikę.
Natomiast bez tego tytułu, który jest tutaj teraz, tak widzimy, że zmienia się
nam tutaj adres, natomiast niewiele się dzieje w Personinfo, wystarczy
tylko sobie poprawić jedną rzecz.
Tam na PersonInfopage zapomnieliśmy o tym, żeby za każdym razem jak personname się
zmienia set loading ustawić na true.
Jeżeli tak będzie no to zobacz, że teraz będziemy mieli loading data about mark.
Teraz jeżeli kliknę Krysia to mamy loading data about Krysia i mamy to personinfo.
Tutaj po prawej stronie możemy sobie obsłużyć jeszcze jeden przypadek w
momencie, w którym nie mamy w ogóle nic załadowane.
Czyli wyobraźmy sobie, że mamy stronę główną, jest List of people i fajnie by
było to rozciągnąć do końca, dlatego że nie mamy co tutaj wyświetlić.
Nie możemy to zrobić za pomocą propsów, które przekazujemy.
Zauważ, że tutaj osadzamy JSX'a i możemy mieć people page, ale
people page z opcją outlet.
Bardzo podobna zasada działania jak w czystym HTMLu.
Jeżeli zrobisz jakiegoś dropsa, a w przypadku HTML'a oczywiście tutaj mówimy o
atrybutach i nie ma on żadnej wartości, to domyślnie jest to wartość true, czyli
outlet będzie miał domyślnie wartość true.
Jeżeli tak to zrobimy, jeżeli tak to zapiszemy.
Natomiast musimy to oczywiście odbierać tutaj i tutaj.
Z kolei domyślna wartość to będzie false.
I teraz, żeby dobrze mnie zrozumieć tutaj na routerjeżeli umieścisz outlet,
to będzie on miał wartość true.
Czyli nie trzeba pisać czegoś takiego.
Nie musimy robić takiego zapisu.
Ten zapis jest równoznaczny z tym jak zapiszemy outlet.
Tutaj z kolei przy People Page chcemy, żeby to outlet domyślnie było na
false, bo chcemy wyświetlać ten outlet.
W takim układzie musimy odwrócić ten warunek.
Czyli jeżeli nie ma not outlet to wtedy chcemy to wyświetlać.
Zobacz, że w tym układzie elegancko widok nam się powiększa.
Natomiast jeżeli klikniemy na coś, to będziemy ładować czy to Ewa czy Mark.
Mamy po prostu odświeżenie tego widoku.
Zobaczmy sobie jeszcze raz pipe'u.
Klikamy i możemy sobie załadować Personinfo.
W tym układzie nasz widok jest gotowy.
I tak wygląda właśnie child routing.
Czyli jest to sytuacja, w którym coś co osadzamy na naszym routingu
będzie miało wewnętrzny outlet.
Więc to co ma podchildren, jeżeli ścieżka będzie się nam zgadzała, zostanie właśnie
wyświetlone tutaj razem z tym komponentem.
Dlatego, że to jest ten komponent główny, który został notabene na
wcześniejszym outlecie osadzony, tak?
Tutaj możemy sobie poprawić jeszcze jeden element, o którym zgłasza
nam slide, czyli People page.
Możemy sobie dodać tutaj propsy.
Teraz w PropTypes będziemy mieli coś takiego jak outlet jako
prop types, bo ten.