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ść, skoro udało nam się już skonfigurować nasze devtools'y to teraz możemy
przejść do dalszej części naszej pracy i na razie nie zaczniemy dodawać
naszych notatek. Zaczniemy od drugiej strony, czyli od usuwania. Jest to
dużo łatwiejsze akcja do wykonania i mam już gotowy komponent, czyli nasz przycisk
remove, który po prostu możemy nacisnąć i wykonać daną akcję. Natomiast dodawaniem
zajmiemy się później, trzeba będzie stworzyć cały ten panel z prawej strony naszej
aplikacji, więc to sobie zostawimy na deser, a na razie pokażę ci
jak możemy połączyć akcje z naszym komponentem i podobnie jak miało to miejsce w
przypadku łączenia danych z naszym komponentem przez mapStateToProps, tak
tutaj mamy podobną funkcję, która nazywa się mapDispatchToProps, jest
to funkcja, która zwraca nam metody,
które możemy wykorzystać w naszym komponencie, które będą dyspatch'ować właśnie
nasze akcje, później przekazywane do reducer'a, a następnie do store'a i z
racji, że nasz komponent card jest uniwersalny. On na podstawie props'a
Card Type, wie jakie rzeczy ma renderować, jaki ma mieć kolor
i tak dalej, to posłużymy się też tym Card Type'm do dyspatch'owania
akcji, bo będziemy przekazywać Card Type w payload'zie razem z id. Zaraz
pokażę ci jak to zrobimy, najpierw stwórzmy sobie taką podstawową
akcje, która pozwoli nam wykonać właśnie usunięcie notatki.
Póki co jeszcze nie tworzyliśmy żadnych akcji w naszym kursie, więc
teraz musimy stworzyć sobie nowy folder o nazwie
Actions i w nim stworzymy sobie index js i tak
jak mówiłem w poprzednich lekcjach, akcje to są zwykłe dość proste funkcje,
które po prostu przyjmują typ i jakiś payload, więc teraz
stworzymy sobie pierwszą akcje. Nazwiemy ją remove note
albo nawet mam lepszą nazwę remove item, ponieważ to jest taka funkcja
generyczna, ona tyczy się zarówno notatek, twitter'ów i artykułów, więc
lepiej żeby nie było tutaj note, bo to mogłoby wprowadzać w błąd i teraz ta
funkcja będzie przyjmować item type oraz id. Chodzi
o to, że item type będzie definiował jaki element z jakiej tablicy
czy spliterów czy z notatek czy z artykułów będzie trzeba usunąć, a id
właśnie będzie definiowało, który dokładnie element trzeba wywalić z
tego równania, więc teraz sobie zwrócimy to wszystko. Możemy
to zrobić w taki sposób używając nawiasów okrągłych albo możemy zrobić
to w ten sposób, zwracając po prostu obiekt
i na pewno będziemy zwracać tutaj typ
akcji, to będzie remove item i oprócz
tego będziemy wracać payload, a w payland będziemy wrzucać item type
oraz id. Okej, skoro
nasza akcja już jest gotowa to teraz możemy wejść sobie do naszego reducer'a
i tutaj też trzeba zrobić porządek. Na
chwilkę sobie trochę powiększymy, żebyśmy mogli lepiej to wszystko widzieć, musimy
tutaj stworzyć Switch Statement, który będzie identyfikował typ naszej akcji, więc
musimy zrobić Switch Action Type, w ten
sposób nasz reducer będzie wiedział jaka akcja do niego wpada i teraz w
przypadku, jeśli action type to będzie remove item, no
to już wiemy co robić i teraz wszystkie takie akcje w naszym reducerze
zawsze zwracają nowy stan. On nie jest zmutowany w żaden sposób, on
po prostu uwzględnia te zmiany, które my chcemy zawrzeć, więc w tym przypadku, jeśli
my chcemy usunąć jakiś element z jednej z tablic, musimy
zrobić coś takiego. Zwracamy obiekt, zwracamy
nasz stan, który był przed wykonaniem akcji, a dodatkowo
nadpiszemy sobie te tablice, która została
w jaki sposób zmodyfikowana, jeśli mówię tablica to mówię albo notes albo articles
albo twitters, bo to są właśnie nasze tablice, w naszym state'cie i teraz
nie możemy tutaj wpisać po prostu twitters, ponieważ to jest dynamiczne, więc
musimy użyć właśnie tego item type, które podałem w naszym
action. Teraz możemy tutaj wpisać action payload item type
i w ten sposób mamy dostęp do dynamicznych kluczy
w naszym obiekcie state, a
to nie będzie obiekt to będzie tablica i tutaj również musimy
użyć spread operator'a i wybrać sobie też za pomocą dynamicznego klucza ten
element naszego state'u, który chcemy modyfikować, w tym przypadku to znowu będzie action payload
item type i żeby usunąć jakiś element
z niego mając jego id, najłatwiej będzie po prostu użyć metody filter,
która przyjmuje item i później porównuje sobie item
id do action
payload id. Jeszcze wrzucimy tylko Default Case,
żeby linter się do nas nie czepiał,
okej. I teraz jeszcze raz powoli
wyjaśnię co my tutaj zrobiliśmy, zanim pokażę ci, że to faktycznie działa. Wprowadzamy
sobie poprzedni state, który mieliśmy, żeby mieć pewność, że niczego nie nadpisujemy, następnie
wybieramy sobie za pomocą dynamicznego klucza, czyli tego item type,
które podaliśmy w tym miejscu. Teraz to będzie na przykład twitters, wybieramy
sobie właśnie tę tablicę, którą chcę modyfikować, więc to
możesz podmienić na cokolwiek co będzie podane do naszego action, czy to będzie notes
czy to będzie twitters czy to będzie articles. Później wchodzimy sobie
do tej tablicy konkretnej i tutaj również zwracamy
nasz stan, ale jest on przefiltrowany i to co jest ważne to
to, że filter nie mutuje nam tablicy, tylko zwraca nam nową tablicę,
więc w tym przypadku mówimy
state. Dostań się do czegokolwiek co my tutaj chcemy, powiedzmy,
że to będzie twitters, czyli będzie tu state kropka twitters, przefiltruj nam
twitter'y. Sprawdź każdy pod kątem id, jeśli któryś
ma takie samo id jak to z elementu, który chcemy usunąć, to
wywal ten element, który chcemy usunąć i zostaw wszystkie inne, które
nie mają tego id, czyli to jest taka trochę odwrócona logika, bo my nie
usuwamy konkretnego elementu tylko zwracamy wszystkie elementy, które nie mają
takiego id jak podaliśmy. Okej, udało nam się tworzyć naszą
pierwszą akcję i udało nam się stworzyć logikę, która teoretycznie powinna nam usuwać
wybraną notatkę. W następnej lekcji podepniemy sobie to wszystko pod nasz
komponent i sprawdzimy czy to faktycznie działa.