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ść, udało nam się stworzyć panel, który pozwoli
nam dodawać nowe notatki, więc teraz zajmiemy się tworzeniem akcji, która pozwoli
nam właśnie wykonać to wszystko, te wszystkie operacje i zrobimy
to sobie pliku index.js w folderze Actions
i żeby dobrze to skonstruować, to zerknij my sobie
na chwilę na nasze details page i tutaj
mamy przykładową notatkę. Możemy ją sobie skopiować, wrzucimy
sobie ją na razie tutaj w formie komentarza, żebyśmy nie zapomnieli co tutaj mamy. Możemy
sobie skopiować też akcje remove item, nazwiemy
ją add item i
podobnie jak poprzednia akcja, również będzie zawierać item type, będzie
zawierać id i trzecią rzecz, którą tutaj sobie wrzucimy to item
content i to będzie obiekt, który będzie po prostu podawany
do tej funkcji. Dodatkowo myślę jeszcze, że to id
nie do końca powinno być podawane do tej funkcji. Jest
generalnie pewnie mnóstwo pomysłów na to jak można by było to rozwiązać, ale
my na razie stwórzmy sobie taki najprostszy, najbardziej łopatologiczny na potrzeby
tego kursu czyli stworzymy sobie funkcję która będzie po prostu
nam generować id i teraz tutaj di id możemy podawać po
prostu get id i zaraz zobaczymy czy
to faktycznie będzie działać. Drugą rzeczą, którą musimy sobie zrobić to pójść do naszego
reducer'a i zadeklarować mu, że słuchaj,
jeśli będzie taki case, że robimy add item, to
musisz zrobić kilka rzeczy dla nas. Przede
wszystkim wprowadzić state taki jaki był. Tutaj wszystko się zgadza,
tutaj to zostawiamy, ponieważ również wchodzimy do jakiejś konkretnej tablicy i teraz
w tym miejscu musimy stworzyć dwie rzeczy. Pierwsza
to state action payload item type,
a druga to dodamy
po prostu do tego state'u, który tutaj się znajduje, nasz obiekt i możemy
go tutaj wrzucić wpisując po prostu action payload item
content. Teraz otworzymy sobie nasze redux'owe dev tools'y
i podepniemy
sobie do naszego komponentu w tym miejscu mapDispatchToProps,
który nam pozwoli na wykonanie tej akcji po kliknięciu add note czyli
teraz musimy zaimportować sobie Connect z naszego React Redux,
stworzyć
tutaj Connect, który łączy nam nasz
komponent opleciony Higher Order Component, a dodatkowo
damy sobie mapDispatchToProps, podajemy
oczywiście dispatch, zwracamy obiekt
i podobnie jak wcześniej podajemy to jako nasz drugi argument,
zaimportujemy teraz sobie naszą akcję, która
się nazywa add note i podobnie jak wcześniej musimy ją nazwać
add note action, żeby uniknąć błędów z ESlinta i
nasza
akcja przyjmuje item type i
item content, okej. Dostaliśmy błąd, że nie wyeksportowaliśmy sobie naszej
akcji. Wyeksportowaliśmy
tylko import jest zły, add
item, a nie add note, dobra i teraz
zanim cokolwiek dodamy dynamicznie to spróbujmy sobie w naszym button onclick
podać po prostu te
funkcję, którą tu podaliśmy, czyli add item, nie wiem czemu się
tak uparła na to add note i jako
parametry podajemy page context oraz obiekt
zawierający dane, więc możemy tutaj dać title, mniejsza
o to co to przekazujemy. Teraz sprawdźmy czy ta
akcja wywoła się poprawnie jeśli dodamy coś do naszego form'a
tutaj, a nie właściwie nic nie musimy dodawać, bo wystarczy że klikniemy add note
i coś się powinno wykonać, okej, widzimy, że mamy siedem notatek
i przychodzi kolejne, kiedy klikamy add
note, czyli nasza akcja wykonuje się poprawnie. Co więcej zawiera dokładnie to, co chcieliśmy,
żeby zawierało. Widzę tylko, że brakuje mu tutaj id i to wynika z tego, że to id
faktycznie podajemy w naszej funkcji, ale nic więcej się z tym nie dzieje, więc to co moglibyśmy
zrobić, to może stworzyć tutaj item, do
którego podamy sobie nasze id w postaci get id
oraz za pomocą Rest
operator'a wprowadzamy item content, w ten
sposób on nie powinien być tutaj dodawany jako osobny obiekt,
tylko właśnie połączone w jeden obiekt z tym id zamknięty w tym
obiekcie. Tylko teraz jak zmieniliśmy to na item to musimy jeszcze w naszym reducerze zmienić
tutaj jedną rzecz, action payload item. Dobra
odpalmy sobie nasz tamtab i lecimy. Zobaczmy
czy teraz dostaliśmy notatkę z id, tak
się właśnie stało i te notatki faktycznie są unikalne, raczej
nie wpadniemy na taki problem, żeby one stały się takie same i
skoro nasza akcja się wykonuje i nasz formularz jest gotowy, to teoretycznie możemy
sobie teraz przejść do faktycznego dodawania tego, co tutaj się
znajduje w naszym formularzu. Zauważ jeszcze, że odróżniłem w twitterach tytuł
od twitter name. Wynika to z tego, że te tytuły faktycznie fajnie jakby zostały takie custom'owe,
że można sobie wpisać co chcemy, a dopiero twitter name się zmienia, bo
twitter jest tak naprawdę potrzebny tylko dlatego, żeby ten avatar dobrze wyglądał,
więc to sobie zostawmy w taki sposób, rozdzielone i teraz wpadł
mi do głowy naprawdę szalony pomysł. Ponieważ ja zawsze pracy korzystałem
z React final form'a, czyli takiej paczki, biblioteki do obsługi
formularzy w React'ie, ale z jednej strony, ale z jednej strony
jest on dość skomplikowany, a z drugiej strony fajnie by było żebym pokazał
ci jak pracuje z jakimiś bibliotekami, których jeszcze nie znam, bo to jest część
pracy deweloper'a żeby po prostu od zera z czymś się zapoznać i teraz
zrobię to na twoich oczach, skorzystamy z Formica. To jest druga bardzo
fajna biblioteka do formularzy, niemniej nigdy jej nie używałem,
ale wygląda całkiem fajnie. Spróbujmy ją wykorzystać w naszym formularzu w tym miejscu.