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 na zadanie podsumowanie tego modułu.
Jako zadanie chcę, żebyś wykonał dwa komponenty.
Jeden to Notification.
Tu jest prosty kod odchudzony z bulmy.
Bulma ma taki komponent jak Notification.
Możesz sobie odnaleźć tutaj korzystając z Search.
Zauważ, że w najbardziej odchudzonej formie.
Czyli nie potrzebujemy tego cancel buttona.
Tutaj chcemy po prostu mieć div class Notification.
A drugi komponent to jest bar, którego widać tutaj.
Niby jest dość prosty, jednak w momencie, w którym dostajemy Responsive Web Design
zobacz jeżeli jak gdyby modyfikuje wielkość tego okna to
dostajemy tutaj burger menu.
Na razie jest to krzyżyk i na razie nie będzie to działać.
Będziemy sobie to w kolejnym module aktywować tak, żeby burger
menu działało poprawnie.
Natomiast na razie chcę najprostszą możliwą formę NAV bara.
Ta najprostsza zawiera trochę kodu, dlatego, że ten cały burger menu, które
mamy tutaj, ono jest nam potrzebne, więc tutaj będzie jak gdyby tyle elementów,
które pozwolą nam na to, żeby zobaczyć właśnie burgera w ten sposób.
Tutaj dodana jest celowo klasa Is Active, dlatego, że jej brak lub dodanie.
Powoduje, że dany element się pojawia albo znika, czyli jak gdyby.
Widzimy, że dodanie i odjęcie tej klasy będzie skutkowało tym, że będziemy.
Tutaj otwierać zamykać to burger menu.
Aktywację tego zrobimy sobie później.
Natomiast jeśli chodzi o Navbar.
To jest kolejny element z bulmy.
Kolejny element, który chcemy sobie odnaleźć.
Ja skorzystałem z tego Navbara, który jest na samym początku ten basic Navbar, więc
stąd możesz wziąć cały ten kodzik lub z materiałów lekcji 14.
Natomiast cały ten kod trzeba odchudzić dlatego, że nie potrzebujemy
aż tyle elementów.
Ja tutaj po prostu ograniczyłem to do minimum.
Cel zadania jest następujący chcesz wykonać dwa komponenty?
Jeden to po prostu notification, w którym będzie props, który ma możliwość
modyfikacji właśnie tego, co jest zawarte w tym Notification i będziemy mogli sobie
używać to w aplikacji, a drugi to Navbar i ten Navbar, który przygotujesz ma mieć
właśnie te linki do swojego menu w postaci tablicy w postaci area,
który będzie zawierał dane.
Czyli chcielibyśmy tutaj przygotować jakieś kolekcje danych,
którą będziemy wyświetlać.
W ten sposób przećwicz te elementy, które były w tym module.
Użyj Prop types.
Użyj kod splitingu tak, aby każdy komponent był w oddzielnym
pliku i zbuduj ten widok. Komponent owo.
W tym miejscu zapauzuj sobie to nagranie i za chwilę zrobimy to zadanie razem.
Ok, spróbujmy to zadanie wykonać razem.
Mamy tutaj Notification i myślę, że jeżeli klikniemy prawym Refaktor Extract
komponent i function i tutaj będzie to po prostu notification, to to by wystarczyło.
Natomiast chcemy, żeby to Notification miało jeszcze props, a jako message
to message chcemy wyświetlić w tym miejscu i będziemy chcieli naprawić Probtypes
oczywiście dla Notification.
Zobacz, że jeżeli dodamy Notification i Message razem z Type String
nie mamy błędów z Slinta.
Tutaj Notification to będzie po prostu jakiś message, który sobie ustalimy.
To może być message na zasadzie właśnie tego, co mamy w prototypie.
Spróbujmy sobie wrzucić coś takiego tutaj jako string.
Możemy również przygotować sobie ten notification troszeczkę inaczej.
Co by było gdyby message to było tak naprawdę children
i domyślnie to children jest empty, ale my chcemy sobie tutaj móc modyfikować tą
zawartość tego HTML'a, który mamy w środku.
Jak najbardziej mamy taką możliwość, jakby przygotowując sobie Notification
właśnie w ten sposób.
Teraz jeśli chodzi o Children musimy określić, że to jest type String.
Nie do końca jest to prawda, dlatego, że Proptypes powinno być teraz one of the
type i możemy sobie zobaczyć, że będzie to albo Proptypes, które jest w naszym
przypadku stringiem, albo prop types, który jest w naszym przypadku elementem.
Czyli możemy tutaj sobie wrzucić jakiś inny element.
Zobacz, że może być to na przykład paragraf z napisem hello i dostaniemy
tutaj elegancko paragraf z napisem hello.
Czyli tutaj możemy mieć paragraf i na przykład jakieś style color red
i zobaczymy, że to nam się w ten sposób wyświetla, czyli reaguje na te zmiany.
Super, Mamy tutaj One of type, czyli.
Czyli gen może być stringiem, może być elementem, to notification.
Oczywiście musimy sobie przerzucić, bo to musi być w osobnym komponencie, czyli
tutaj można refactorMove i tutaj można sobie to przenieść do
nie tyle Notification JSX, co Components Notification JSX.
Czyli mamy przeniesione Notification.
Powinniśmy jeszcze przenieść Notification Proptypes.
Czyli tutaj przenosimy sobie import propsów.
Nie potrzebujemy tego Notification.
Ten import powinien wrócić tutaj do App JSX, natomiast tutaj mamy
Proptypes i Notification.
I to jest nasz pierwszy komponent, tutaj osadzony właśnie w ten sposób.
Drugim elementem będzie Navbar.
Czyli możemy sobie tutaj utworzyć z kolei zróbmy sobie to w drugą stronę.
Utworzymy sobie coś takiego jak bar.
Tutaj klasycznie eksportujemy funkcję Navbar, więc mamy komponent na bar
i wrzucamy go sobie tutaj.
Czyli to całe Navnow będzie po prostu jako Navbar.
I teraz chcieliśmy, żeby te dwa elementy były jako lista.
Możemy sobie zdefiniować menu items, które będzie obiektem dlatego, że w tym
konkretnym przypadku mamy dwie rzeczy, które nam się zmieniają, czyli z jednej
strony mamy item, a z drugiej strony mamy href, który się zmienia.
Więc ja bym chciał to sobie zrobić jako title albo name
i href, który nam się tutaj zmienia.
I drugi obiekt tej tablicy też będzie miał name i href i href.
Pierwszy to jest po prostu łamaniec, a drugi to mamy exchange.
Co więcej tutaj będziemy mieli exchange, a tutaj będziemy mieli people.
I teraz to menu items.
Chcemy sobie tutaj bardzo fajnie rozłożyć.
Spróbujmy zrobić to sobie na jeszcze jednym komponencie, bo to jest Twoja
decyzja i możemy tutaj mieć kolejny komponent.
Navbar Item Zobacz, będzie to nasz item JSX.
I tutaj zrobimy sobie kolejne exploit faction NumberItem.
Spróbujmy sobie tutaj przekazać props, który będzie zawierał href i name.
Możemy zwrócić sobie tutaj tego jsXa w nawiasach.
I podstawiamy tutaj. A href.
A tutaj name.
I oczywiście potrzebujemy proptypesów, żeby określić sobie przede wszystkim href.
To będzie string I is required I name.
To też będzie string is required.
Czyli obydwa te tipsy są wymagane.
Będziemy mieli obiekt i chcemy teraz ten obiekt wrzucić
sobie tutaj jako kolejne propsy.
W takim wypadku menu items będziemy chcieli mapować.
Zobacz, że jeden taki item będzie miał tutaj href, a tutaj miałby item Itemname.
To już by nam wystarczyło bez tego exchange, żeby dobrze przemalowywać
właśnie te elementy, które mamy tutaj.
Ponieważ mapujemy po obiektach w tablicy.
Zobacz, że item jest obiektem gdzie mamy age i name i właśnie stosujemy
item a href item name.
Ale nie po to przygotowaliśmy sobie komponent, żeby z niego nie skorzystać.
Czyli tutaj będzie Navbar item, który chcemy sobie zaimportować
i tutaj możemy sobie wrzucić item name oraz tutaj Item href.
Musimy oczywiście zamknąć to Navbar item i dodać key jako href na przykład.
W takim układzie jeśli to odświeżymy, żeby potwierdzić, że wszystko jest w porządku
widzimy, że mamy People i Exchange.
Jeśli teraz zmienimy cokolwiek tutaj na przykład dodamy wykrzykniki.
Zauważ, że to jest widoczne.
Widzimy, że tutaj możemy dopisać sobie kolejne, kolejne elementy,
które byłyby kolejnymi podstronami.
Na przykład ad person.
Moglibyśmy tutaj dodać jako nasze kolejną pozycję menu.
Więc w ten sposób możemy programistycznie jak gdyby wrzucić sobie elementy.
I to jest ta powtórka z lekcji, w którym renderowaliśmy kolekcję danych.
Co więcej, jeżeli mamy taką sytuację, że tutaj mamy name i name, nam się powtarza
item href zobacz, że href, czyli ten obiekt, który jest tutaj jest
równoznaczny z procesami, które są w item.
Czyli zwróć uwagę, że navbar item ma href i name takie same propsy jak tutaj.
Moglibyśmy to sobie rozkodować?
Czyli w momencie gdy tego nie podamy będziemy mieli tutaj error is proptypes,
ale możemy to spreparować sobie w ten sposób.
Czyli item może dostarczyć właśnie Wszystko to, co mamy tutaj, czyli name i
href będzie dostarczone do każdego z tego navbaritem.
I w ten sposób możemy sobie zrefaktoryzować ten widok tak, aby
przekazywać to bezpośrednio do tego komponentu.
W tym momencie mamy bar, który renderuje swoje navbaritem na podstawie danych.
Te dane to jest tablica obiektów i tutaj korzystamy właśnie z obiektów, tak żebyś
mógł zauważyć sobie, że jak najbardziej możemy mieć po pierwsze tablicę obiektów,
po drugie jeśli iterujemy po tej tablicy, to te obiekty możemy sobie przekazywać
właśnie jako propsy i jeżeli propsy naszego komponentu są takie same jak pola
tego obiektu, to możemy użyć takiego zapisu ze spredem.
Zbliżamy się tutaj powoli, powoli do w pełni działającej aplikacji.
Nie działa nam jeszcze oczywiście to menu tutaj, no i nie możemy zaznaczać
elementów, ale do tego wszystkiego potrzebujemy zrozumieć czym
jest stan i używanie UseState.