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.
Spróbujmy teraz dostać taką funkcjonalność jak tutaj, żebyśmy mogli wyświetlić
taki znaczek po zaznaczeniu.
Nie znamy jeszcze mechanizmu zmiany stanu, o czym pouczymy się w kolejnym module, ale
już teraz możemy sobie powiedzieć o renderowaniu warunkowym.
Wyobraźmy sobie, że mam tutaj za selektor imię Krysia i chciałbym, żeby Krysia
pokazywała się właśnie z takim znaczkiem, który mamy tutaj.
Zobaczmy to na naszej liście w tym projekcie, który teraz tworzymy.
Gdybyśmy chcieli coś takiego dodać, moglibyśmy to dodać za
pomocą chociażby emoji.
Zwróć uwagę, że w tym układzie, jeśli to dodaję, dodane to będzie wszędzie, a ja
chciałbym, żeby było dodane tylko do Krysi, czyli tylko na podstawie warunku,
że selected name, czyli to name, które tutaj mamy, to Krysia.
Chciałbym dodać właśnie to.
Już wiemy, jak to sobie rozwikłać.
Moglibyśmy sobie to wyobrazić w ten sposób, że zrobimy sobie właśnie to jako
string, czyli po prostu wrzucimy to sobie w ten sposób.
Tak.
I to jest jakby pierwsza rzecz, którą zauważymy i możemy sobie to
zrobić dynamicznie, w taki sposób.
Ale uwaga!
Ponieważ jest to jakiś fragment, to żeby teraz sprawdzić warunek SelectNames,
sprawdźmy sobie czy selectNames includes name.
Jeśli tak, to chcemy to pokazać.
Czyli możemy sobie tutaj zrobić to w ten sposób.
Czyli zwróć uwagę, że tutaj ten zapis and end daje nam właśnie conditional
rendering, czyli tutaj niezależnie od tego, czy to będzie true czy false.
Jeśli będzie to false, to nie zostanie wyrenderowane nic, a jeżeli będzie true,
no to jak gdyby true też nie zostanie wyrenderowane dlatego, że zostanie
sprawdzone to co jest po prawej stronie.
Możesz to zapisać bardziej rozwlekle, jeżeli dasz tu znak zapytania,
dwukropek i pusty string.
Wtedy użyjemy tak zwanego turner czy operator, ale akurat w tym konkretnym
przypadku nie musimy tego robić.
Dodatkowo możemy zobaczyć sobie jak byśmy sobie wyrenderowali coś za pomocą if else.
Można by pomyśleć, że if else być może tutaj zadziała.
Czyli gdybyśmy poszli troszeczkę naiwnie i stwierdzili, że dobra, nie znamy tego
zapisu, nie znamy tunery Operator, więc tutaj zakomentujmy to sobie na razie
w ten sposób i spróbujmy sobie dodać faktycznie strukturę if else.
Jeśli chcielibyśmy sobie tutaj dodać if else if, to okaże się, że nie jest to
takie proste, dlatego, że ten zapis tutaj nie zadziała.
Nie jesteśmy w środku funkcji, nie możemy sobie tego zwrócić w tym momencie mamy
tutaj złożenie kilku obiektów i if else nie zadziała, jeśli zaczniemy go pisać.
Niezależnie od tego, czy go sobie tutaj uzupełnię czy nie, nie
mogę go sobie tutaj użyć.
Mamy an expected token if.
Natomiast możemy bardzo sprytnie zauważyć, że dobra, skoro ja nie mogę użyć if else
tutaj, to na pewno jak przerobię to wszystko na komponent, będę w
stanie zrobić właśnie taką logikę.
I właśnie tutaj, jeśli zaznaczysz sobie to a i zrobisz refraktor, mamy tutaj coś
takiego jak extract component, czyli upewnij się, że jest tutaj
zaznaczone function I tutaj wrzucamy sobie coś takiego jak na przykład panel blog.
Wtedy zostanie po prostu przygotowana dla nas funkcja.
Czyli mamy tutaj panel blog razem z Props.
Wrzucone są też Proptypes, których jeszcze nie mamy.
To zrobimy sobie później.
Natomiast panel blog, który tutaj mamy.
Zwróć uwagę, że możemy sobie wyekstraktować name jako props
i spróbujmy sobie tutaj jak gdyby zrobić coś takiego jak jest selected.
Jeżeli zrobimy sobie selected to będziemy w stanie przesłać jak gdyby to czy dany
element mamy za selectować czy nie, czy ma się pokazywać to co mamy tutaj czy nie.
W tym układzie jest selected, będzie oznaczony jako false.
I możemy sobie tutaj zrobić if else.
Czyli możemy sobie powiedzieć, że jeżeli jest to selektor to zwrócimy sobie właśnie
taki komponent jak tutaj razem z Isactive.
A jeżeli nie, nie musimy tutaj zauważ stosować else dlatego,
że mamy tutaj return.
W takim układzie, jeśli coś nie jest selektywne, to po prostu zwrócimy to z
najmem i nie będzie miało tej klasy Isactive.
Mamy to na tej zasadzie.
I tutaj panel blogname domyślnie będzie po prostu pustym stringiem.
Mamy tutaj problem z PropTypes, ale Disable nextline React PropTypes sobie
użyjemy, żeby nie zgłaszany był ten błąd.
Natomiast tutaj chcemy sobie dodać właśnie ten element, który będzie jako Active.
I teraz zauważ, że możemy sobie to zapisać w ten sposób.
Tutaj jeśli to umieścimy w spamie, to będziemy mogli odprowadzić
to sobie na prawą stronę.
Zwróćmy uwagę, że panel blog teraz musi dodatkowo poza name dostawać
isSelected i to isSelected.
To będzie nasz warunek.
Czyli isSelected będzie warunkiem czy selectedNames includes.
I tutaj wrzucimy sobie name.
Zobacz, że to działa.
Krysia jest zaznaczonym elementem people.
W takim wypadku możemy jeszcze tutaj dla porządku dodać sobie coś takiego jak flex
i dodatkowa klasa, żebyśmy mieli odprowadzono tego pana na prawą stronę.
W takim wypadku tutaj możemy mieć Neymar i coś jeszcze, a po prawej stronie będziemy
mieli tego pana razem z selektywnym elementem.
Zwróć uwagę, że jednak jest to troszeczkę rozwlekłe.
I tutaj mamy return, który daje nam ten wariant z Selector.
Tutaj mamy return, który daje nam wariant czysty.
Dużo korzystniej byłoby sobie nam podmieniać ClassName i tutaj zastosować
właśnie conditional rendering za pomocą albo Turner i operatora, albo
za pomocą tego podwójnego end.
Jednak do tego refactoringu sobie dojdziemy.
Na razie zostawimy to w ten sposób, tak abyś też wiedział jak zastosować składnię
if else i gdzie ona będzie nam potrzebna.
Mamy więc conditional rendering na zasadzie właśnie albo tego zapisu z endem,
albo Turner i operatora, albo tutaj składni if else.