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.
Czas uruchomić nasz formularz, który dodaliśmy w zadaniu wcześniej.
Chcemy tutaj dodawać nowe osoby tak, żeby pojawiały się tutaj na liście People.
Mamy to w osobnym panelu.
Mamy to w osobnej stronie, a new Person chcemy tutaj sobie dodać i po kliknięciu
na Add mamy już zablokowany on submit, ale chcielibyśmy odczytać dane w inpucie,
czyli tego name'a, który wpisujemy i w jakiś sposób wysłać zaktualizować.
Do tej pory odczytywaliśmy wartość inputa, ale to było tylko w zadaniu i to było
tutaj w onChange właśnie w Searchboxie.
Spróbujmy pożyczyć sobie ten kawałek kodu, czyli tutaj w tym inpucie chcemy sobie
zrobić właśnie onChange, ale chcielibyśmy, żeby w naszym stanie
danych był person name.
Czyli zobacz, tutaj będziemy chcieli to ograć UseState em, żeby nasz stan danych
zmieniał się w czasie i personname razem z setPerson name to będą te elementy, które
pozwolą nam na aktualizację tego stanu i odczytanie person name.
I tutaj przy Event Target value mamy informację zwrotną, że coś zostało
zaktualizowane, a z kolei tutaj w value chcemy aktualizować to person name.
Robimy z inputa tzw.
control komponent, w którym będzie można aktualizować rzeczy, ale musimy
zainicjować to z jakąś wartością.
Czyli gdyby wartość początkowa to była.
Michał, to zauważ, że jest to tutaj w tej naszej kontrolce,
czyli value zostaje zaktualizowane na podstawie stanu.
Z kolei jeśli my aktualizujemy ten stan i zrobimy na przykład Kasię, no to jak gdyby
jest to aktualizowane, widzimy, że działa.
Ustalamy sobie początkową wartość jako pusty string i tutaj wyodrębmy
sobie funkcję handle submit.
Gdybyśmy zrobili funkcję Handle Submit set Person name możemy sobie wyzerować
w momencie, gdy ją wyślemy.
Natomiast tutaj to event PreventDefault wyglądałoby teraz następująco.
Tutaj będzie event.
I weźmy sobie event PreventDefault.
Zróbmy to sobie dla przykładu w ten sposób i handlesubmit podmieniamy sobie tutaj na
referencję właśnie do tej funkcji, którą tutaj mamy.
I teraz jeżeli personname robimy sobie podstawową jakąś walidację, jeżeli
personnamelength jest większe od zera, czyli albo można sobie
zrobić jeszcze inaczej.
Jeżeli personname po prostu jest uzupełnione, bo jest to falsy value.
Jeżeli jest to pusty string, no to wtedy zróbmy sobie return.
Czyli nie chcemy robić nic dalej.
Natomiast jeżeli wszystko jest w porządku to chcemy wyzerować tą
wartość, czyli zobacz dodajemy.
Widzimy, że to działa.
Można to zrobić również z enterem dlatego, że jesteśmy w środku formularza i mamy
button, który ma typ submit, więc enter też zadziała jeżeli tutaj
wpiszemy sobie Kasia Enter.
Zauważ, że to działa i na tym przykładzie chcielibyśmy sobie na podstawie tego
imienia zaktualizować listę naszych osób.
Moglibyśmy sobie naiwnie do tego podejść w ten sposób, że jeżeli mamy tutaj coś
takiego jak PIP u, to moglibyśmy wyeksportować sobie funkcję ad person i na
podstawie Neyma aktualizujemy people jako push i tutaj name I to
powinno nam zadziałać.
I paradoksalnie tutaj naiwnie nie znaczy źle.
Naiwnie nie znaczy najgorzej.
No i nie znaczy, że to podejście nam nie zadziała.
Zaraz zauważysz, że jeżeli tutaj dopiszemy sobie add person i tutaj będzie person
name, czyli mamy to ad person z people JS tak?
Zaimportowane.
No to jeżeli tutaj dopisze sobie Monika i uderzy Enter, a później Mariusz, no to
wtedy w People będę miał te dwa imiona i one będą cały czas
działały z naszą logiką.
Dzieje się tak dlatego, ponieważ w momencie, gdy dodaje to nowe imię, zauważ,
że ja nie muszę jak gdyby aktualizować widoku.
Gdybym musiał zrobić jakiś update na widoku, to wtedy to nie zadziała.
To tak nie zadziała, dlatego, że aktualizujemy po prostu referencję do
zwykłej tablicy ze zwykłymi stringami.
Robimy zwykłego pusza.
React nie ma możliwości wiedzieć, że ma zaktualizować stan.
Żeby to było, musielibyśmy mieć tutaj usestate gdzieś.
No i właśnie to daje Ci do myślenia, że gdybyśmy chcieli to rozwiązać w ten
sposób, że jakakolwiek aktualizacja, dodanie właśnie do tablicy People dwóch
nowych imion miałaby aktualizować na widoku natychmiast coś, to musielibyśmy
sobie zrobić własnego, dedykowanego hooka.
Tak by było najprościej.
Czyli swoim własnym hukiem juz People na przykład ogralibyśmy temat tego, że możemy
w trakcie działania aplikacji dodać coś i liczymy na to, że React będzie
wiedział, że ma zaktualizować stan.
Wtedy takim customowym hukiem moglibyśmy sobie poradzić.
Natomiast tutaj dołóżmy jeszcze jedną funkcjonalność.
Załóżmy, że chcemy, żeby styl i opacity tego buttona było zależne od tego,
czy personname jest podany czy nie.
Jeśli personname jest podany to opacity jest 1.
Jeśli nie, to jest na przykład 0.6. I to jest ciekawa funkcjonalność, dlatego, że.
Zauważ, że z punktu widzenia accessibility nie chce zabrać klikalności tego buttona.
Chce, żeby on był klikalny.
Czyli chciałbym, żeby tutaj wpisując sobie jakieś imię, wtedy to się podświetliło,
ale niezależnie od tego, czy wpisałem, czy nie dało się kliknąć w
button, on się tutaj waliduje.
Nie mamy co prawda informacji zwrotnej na temat walidacji, ale do tego
przejdziemy sobie w następnej lekcji.
Natomiast tutaj widzimy, że zmieniam tylko opacity, zmieniam tylko graficznie, daję
informację, że jeszcze coś potrzeba, żeby aktywować ten button, żeby
on faktycznie nam zadziałał.
Natomiast nie stosuję do tego Disable, wręcz przeciwnie, robię to jako style
opacity, żeby button był dalej klikalny.