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 poprzedniej lekcji udało nam się poprawnie skonfigurować storybook'a w taki
sposób, że mamy dobrze zaimportowane fonty i mamy swoje
pierwsze dwa story'sy swoje dwa pierwsze przykłady dla
tego komponentu button, a teraz pora przejść trochę dalej i pokazać
bardziej zaawansowane rzeczy i teraz opowiem ci o mops'ach czy też knobs'ach,
które są takimi dodatkowymi opcjami, dodatkowymi props'ami,
które w trakcie przeglądania storybook'a możemy zmieniać. Jest bardzo fajne,
bardzo wygodne narzędzie, które pozwala nam na to, że możemy podglądać
sobie jak zachowują się nasze komponenty podczas jakieś interakcji, podczas zmieniania
ich stanu, więc teraz zrobimy najpierw rzecz,
która pozwoli nam skonfigurować te mobs'y, skompilujemy
sobie taki import, do pliku addons js jest w konfiguracji
naszego storybook'a, a tutaj po prostu deklarujemy, że będziemy korzystać z nops'ów
i w tej chwili nops'y już są gotowe do działania teraz przejdźmy sobie naszego
komponentu, do naszego stories i zobaczymy, co my tutaj mamy, widzę
że mamy nadal ten błąd ESlinta, który nam podkreśla, że nie
możemy tak importować, proponuję żeby zrobić to w ten sposób, bo
robiłem mały research na ten temat i generalnie ciężko się pozbyć tego błędu,
więc po prostu wyłączymy sobie tę
regułę w naszym ESlint'cie. Nie
zrobi nam to za dużej krzywdy, a na potrzeby projektu będzie to na pewno dużo
łatwiejsze niż jakieś tam dodatkowe konfiguracje i tak dalej już się
dosyć z tym męczyliśmy z tym ESlintem, okej teraz postaram się
dodać jakiegoś nops'a, żeby zobaczyć jak to działa w praktyce, więc przejdźmy
sobie teraz do dokumentacji i tutaj mamy coś takiego do
zaimportowania, że importujemy najpierw dekorator with knobs, który komunikuję
storybook'owi słuchaj, będziemy korzystać z nops'ów, a później pobieramy sobie
jeden z typów, który możemy wykorzystać i tych typów jest naprawdę wiele, tutaj
mamy w dokumentacji, są one wyszczególnione, to może być zwykły tekst to może być boolean, to
może być numer ale ja chciałbym wykorzystać coś bardziej zaawansowanego, a mianowicie
select, select pozwala nam na to, że możemy z jakiejś grupy
opcję wybrać sobie tę, która interesuje nas w danym momencie, więc
teraz skopiuję sobie ten kod. Dodałem
tutaj od ciebie with knobs, którą muszę dodać jako dekorator do na mojego story i możemy
to zrobić w taki sposób, tutaj dodajmy
od decorator with mops i teraz
popatrzmy co mi tutaj wkleiliśmy, przede wszystkim color i my
tutaj zrobimy coś takiego. Jeśli przyjrzymy się naszym design'om, to
mamy tutaj trzy rodzaje kolorów i to właśnie chciałbym zrobić chciałbym zrobić w
taki sposób, że button może być żółty niebieski albo zielony tutaj
mamy wartości tych kolorów, teraz je sobie skopiujemy. Okej,
skoro nasze opcję już są przygotowane, to teraz możemy to value podać
tutaj właśnie do naszego button'a jako props'a. Działa to w taki
sposób, podajemy tutaj kolor i value i w
naszym button'ie musimy jeszcze oczywiście dostosować to do tego, żeby on rozumiał
co my tutaj podajemy, więc tutaj w background color otworzymy
sobie funkcję strzałkową wyciągniemy sobie kolor i powiem,
że jeśli kolor istnieje to ma go dać, a jeśli nie to
podamy tutaj ten domyślny kolor żółty i teraz
jeśli wszystko dobrze zrobiłem to po odpaleniu
storybook'a będziemy mogli zobaczyć te opcję i zmienić kolor naszego button'a. Okej
mam tutaj błąd, okazuje się, że mops'y nie są automatycznie zainstalowane
razem ze storybook'iem, że musimy je zainstalować ręcznie, więc te skopiuje
sobie po prostu nazwę tej paczki i zainstaluję
ją tak
żeby storybook mógł z niej korzystać, okej i
po odpaleniu storybook'a widzimy tutaj, że dodana została nowa zakładka, która się nazywa knobs
i tutaj mamy faktycznie nasze trzy opcje, ha
i nic nam się nie zmienia, jak nam się
ten story przyeładuje to tutaj dostajemy link z jakąś podpowiedzią, zaraz
zobaczymy czy ja czegoś nie zepsułem, dynamiczne
dodawanie. Okej, już widzę jaki jest problem. Bo
moje zmienne zostały dodane poza story, czyli poza tą funkcją,
więc za każdym razem jak coś tutaj zmieniam, to tak naprawdę nic się
nie zmienia, bo jest to po prostu statyczne. To nie jest dodawane dynamicznie, więc wszystkie
te rzeczy muszę po prostu przenieść do funkcji, która
zwraca ten button, więc tutaj w tym miejscu zrobimy
coś takiego, a na samym dole zwrócimy
naszego button'a. Jeszcze tylko jedno małe drobne usprawnienie,
bo tutaj primary podaliśmy jako hsl, a tutaj jeszcze jest
jako heksadecymalny kod, więc tutaj też to odmienimy,
od razu ten szary też
podmienimy. Jestem
wielkim fanem używania kolorów jako hsl, są one dużo bardziej
czytelne niż kody heksadecymalne czy jakiekolwiek inne od
razu widzimy jaki jest kolor na danym stopniu i jakie jest jego nasycenie
jaka jest jego jasność, więc jest to naprawdę świetny sposób na zarządzanie
kolorami. Zresztą te kolory zrobimy jako zmienne globalne, ale
tym się zajmiemy w bardziej zaawansowanej części związane jeszcze ze style-components,
teraz sprawdźmy czy te kolory faktycznie się ładują, po dodaniu tych
zmiennych do funkcji w naszym story, otwworzymy
sobie storybook'a, wejdziemy do nops'ów i teraz uwaga chwila prawdy
i faktycznie nasz
button się zmienia, props'y są dodawane dynamicznie przez knops'y,
także to tyle w tej lekcji, chciałem ci pokazać, że
jest to naprawdę fajny narzędzie do dynamicznego zarządzania props'ami w naszych komponentach. Także
możemy z nimi wchodzić w interakcje, zmieniać ich wygląd, zmienić ich zachowanie, jest
to naprawdę fajne, polecam ci przeczytać sobie dokumentację mops'ów. Jest
tych opcji tutaj naprawdę dużo, my wybraliśmy akurat jedną z takich bardziej zaawansowanych,
ale fajne jest to, że tutaj te przykłady są naprawdę fajnie pisane i można
z nich po prostu korzystać, kopiując je do swojego kodu i dopasowując do własnych
potrzeb.