w Praktyce
6 godz. 51 min · ReactJS · Full-stack i Programowanie
Adam RomanskiFrontend developer & YouTube CreatorNarzędzia typu ESlint, Prettier, Husky czy lint-staged niezmiernie pomagają nam w pracy. Problem jednak polega na tym, że ich konfiguracja bywa kłopotliwa. W tym kursie dowiesz się, jak poprawnie skonfigurować te narzędzia, tak, aby nie wchodziły ze sobą w konflikty i pomagały nam pisać lepszy kod.
Brzmi jak zły pomysł? Wcale nie! CSS in JS to rewolucyjne podejście, które pozwala nam tworzyć style bezpośrednio w komponentach. Dzięki bibliotece Styled Components możesz wpływać na ich stan, wygląd i wiele innych rzeczy. To niezwykłe narzędzie, wprowadzające powiew świeżości dla ludzi zmęczonych czystym CSS.
Dokumentowanie wyglądu i zachowania naszych komponentów bywa kłopotliwe. Jeśli jednak użyjemy odpowiednich narzędzi, staje się banalne! Storybook w połączeniu z podejściem atomic design pozwoli nam na stworzenie świetnie udokumentowanych komponentów.
React w Praktyce nie byłby... praktyczny, gdyby nie pokazanie tego, w jaki sposób rozwiązuje się problemy z layoutem aplikacji. Sidebary, szablony, powtarzalne komponenty – to wszystko poznasz w tym kursie.
Tworzenie store, czyli warstwy z danymi w naszej aplikacji dla wielu bywa wyzwaniem dość trudnym. Wynika to często z tego, że przykłady Reduxa bywają niepraktyczne. W tym kursie dowiesz się, w jaki sposób działa Redux – zaczniemy od podstaw, a skończymy na rozbudowanej strukturze danych. Dzięki temu zobaczysz, że nie taki Redux straszny jak go malują.
Aplikacja frontendowa bez backendu może istnieć, choć jej możliwości będą zdecydowanie ograniczone. A już na pewno będzie ona miała kiepską pamięć. Dlatego w tym kursie stworzymy lokalną wersję backendu połączoną z MongoDB na mLab. W ten sposób będziemy mogli dłużej przechowywać dane zapisane w naszych komponentach.
O testach można mówić wiele. To niezwykle rozległy temat, dlatego zanim zaczniesz je pisać na poważnie, chcę Ci pokazać jak możesz poćwiczyć podstawowe rzeczy. Poznasz narzędzie JEST, które odpowiada za uruchamianie testów, oraz wprowadzę Cię do react-testing-library, jednej z najpopularniejszych bibliotek do testowania aplikacji reactowych.
Ten kurs przeznaczony jest dla osób, które lada dzień będą aplikować na stanowiska juniorskie jako React developer. Zawarłem w nim wiele aspektów pracy z React, które zdarzają się w prawdziwej pracy. Ponadto skorzystać mogą z niego osoby, które znają inny framework JS i chcą nauczyć się Reacta, jednak kursy od podstaw są dla nich zbyt proste.
16.8.x
Cześć, w tej lekcji zajmiemy się autoryzacją naszego użytkownika. Jak
widzisz przygotowałem już specjalny ekran, zarówno dla logowania jak
i dla rejestracji. Niestety są one takim trochę antypattern'em,
ponieważ zawierają one dokładnie to samo, tylko na dwóch różnych widokach
i specjalnie coś takiego zrobiłem, bo chciałbym żeby, i
specjalnie zrobiłem coś takiego, żeby pokazać
ci jak nie powinno się tego robić i przy okazji zachęcić cię do tego, żeby
na własną rękę samodzielnie wykorzystać wiedzę zdobytą już w tym kursie i sprawić,
żeby te ekrany były trochę bardziej racjonalnie napisane, żeby tego
kodu nie było aż tak dużo, także to jest zadanie domowe dla ciebie, a my teraz
przechodzimy do logowania, żeby zalogować naszego użytkownika
musimy później zapisać jego dane takie jak username i id,
ponieważ będziemy je wykorzystywać w późniejszych request'ach, więc żeby to zrobić
musimy to zapisać w naszym storze i teraz stworzymy sobie akcję,
która pozwoli nam na to. Nazwiemy ją sobie authenticate,
będzie przyjmować username i password i teraz
czas zapoznać się z takim dość ważnym konceptem w
redux'ie jeśli chodzi o zapytanie asynchroniczne ponieważ my
tutaj będziemy robić jakiś request, post do naszego APIi to API
albo nam zwróci, że okej albo że nie jest okej, ale fajnie by było też
przed wysłaniem tego request'a, zainicjować do redux'a, powiedzieć
słuchaj leci request do API i teraz bądź gotów
na to co się stanie, więc zazwyczaj w takiego, więc
zazwyczaj w tego typu sytuacjach wysyła się tak naprawdę trzy takie request'y,
więc zazwyczaj w tego typu sytuacjach można otrzymać trzy,
więc, więc zazwyczaj w tego typu sytuacjach
można otrzymać trzy odpowiedzi authenticate
request, później jeśli nasz axios zwróci,
że jest okej to authenticate success,
a jeśli coś pójdzie nie tak to authenticate
failure, ale
z jednego action creator'a możemy dyspatch'ować tylko jeden typ, więc to
co musimy tutaj zainstalować to tak zwane middleware i teraz czym jest middleware. Wyjaśnię ci
też na przykładzie komentarza. Załóżmy, że
mamy jakąś, załóżmy, że mamy jakąś czynność w naszej
aplikacji która triggeruje. Załóżmy, że mamy jakąś czynność w
naszej aplikacji, która triggeruje akcje, więc pojawia się Action Creator,
który wysyła
do naszego stora'a, a właściwie do reżysera
akcje. Reżyser oczywiście
idzie z tym dalej do store'a i wszystko
jest okej. To zostaje z apdejtowane i mamy nowy store
i mamy nowy stan w naszym storze i teraz to czym
jest middleware i jak się je stosuje to i
teraz
to czym jest reducer i teraz to czym jest middleware i jak
się je stosuje, to po prostu chodzi o to że middleware wchodzi
nam trochę pomiędzy akcje, a reducer w to
miejsce i coś robi z naszą akcją. W jaki sposób ją przetwarza,
zatrzymuje. Po prostu jest to funkcja która przyjmuje akcje i coś potrafi z
nią zrobić. Taki middleware, który my chcemy tutaj zastosować w naszej aplikacji to
redux thunk. Pozwala nam to na tworzenie
i specjalną obsługę zapytań asynchronicznych w naszym redux'ie. Zaraz
pokażę ci na przykładzie jak to działa, najpierw sobie to zainstalujemy. Jak
już zainstalujemy to w naszym storze, musimy to skonfigurować. Na szczęście konfiguracja jest
bardzo prosta, musimy tutaj wyciągnąć sobie metodę apply
middleware z naszego redux'a i w funkcji create store,
po tym jak dodajemy sobie ten nasz plugin
dotyczący devtools'ów, wpisujemy
apply middleware thunk. Oczywiście po thunk'u musimy
jeszcze sobie zaimportować z redux thunk
i widzę,
że coś tam tutaj nie poszło, ale zaraz zobaczymy, bo wydaje mi się, że coś z tym devtools'ami
tutaj jest nie tak. Zresztą jak byśmy je sobie usunęli, to nasza
aplikacja będzie działać, więc na pewno jest tu coś z tymi devtools'ami, ale
tutaj widzę, że w tej konfiguracji jest napisane co trzeba zrobić, więc
teraz sobie zobaczymy. Jeśli
wybieramy middleware, to musimy zrobić coś takiego. I z naszego redux'a
jeszcze tylko musimy wyciągnąć sobie compose. Wydajemi
się, że teraz możemy po prostu podmienić jeden store z drugim, nie
zapominając, że nasz reducer się nazywa. Może nas, może
zmienimy tę nazwę on jest do końca fortunna, rootReducer. OK, middleware
is not defined, ponieważ my tutaj używamy konkretnego middleware, czyli thunk
i teraz okej. Nasza aplikacja działa, devtools'y
też działają. Więc wszystko się zgadza, możemy przejść sobie z powrotem do akcji i
teraz, to co umożliwił nam thunk to jeśli stworzymy
sobie faktycznie nasz const authenticate. Podamy
do niego user password, username
i password, to możemy
zwrócić tej funkcji kolejną funkcję, która przyjmuje dispatch i
jak już wiesz dispatch pozwala nam dyspatch'ować
inne akcje i w takiej sytuacji możemy
zrobić coś takiego, że jeśli w ogóle athenticate się odpala to my dyspatch'ujemy
teraz authenticate request, czyli
informujemy nasz store, a właściwie nasze reducer'y, że
poszedł taki, takie zapytanie do API i teraz
w tym momencie dopiero możemy sobie zaimportować tutaj axios'a,
w którym
stworzymy sobie post jako
data oczywiście przekazujemy username i password i teraz tak jak już mówiłem
wcześniej możemy sobie zrobić then, który przyjmuje
result i wtedy dopiero w tym
result możemy dyspatch'ować nową akcje o nazwie
authenticate success, a
jako payload damy tutaj
właśnie ten result, czyli możemy tutaj to nazwać
payload i jeśli
coś pójdzie nie tak, to możemy jeszcze zrobić catch i
tutaj również dispatch'czujemy sobie akcje o typie
authenticate failure
i teraz to co jest bardzo ważne, żeby to działało to,
żeby przed tym axios dodać jeszcze return, bo to musi być wszystko zwrócone
z tej funkcji i teraz na szybko, żeby sprawdzić
czy to wszystko działa to sobie jeszcze tutaj wrzucimy klamry i
wylogujemy sobie payload. Przejdźmy
teraz do naszego login page. Użyjemy
tutaj znanego już connect, połączymy
nasz login page map
dispatch to props i tutaj
użyjemy sobie authenticate, ona
oczywiście przyjmuje username i password i będzie
nam dyspatchował akcje, którą zaimportujemy
sobie tutaj w tym miejscu i teraz wystarczy,
że użyjemy jej tutaj na dole. Podamy username i password,
a następnie zdestrukturyzujemy ją
sobie tutaj i użyjemy
on submit i w tym momencie, jeśli
wypełnię mój formularz to w naszej
konsoli coś powinno się pojawić. Tak,
pojawiły się 403, czyli ten axios faktycznie
podziałał, dostaliśmy console log'a z error
w tym miejscu, więc on wskoczył, podałem nieprawdziwe
hasło, więc poszło do cache'a, a teraz
jak wpisze password raz dwa trzy. To
dostajemy normalnie odpowiedź serwera z user
id, które możemy zapisać do redux'a, do store'a, ale to zrobimy już następnej
lekcji.