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 mamy już skonfigurowane nasze styled-components i możemy z nich spokojnie
korzystać to teraz uporządkujmy trochę nasz projekt, przygotuj mojego do dalszego
developmentu, żeby po prostu spokojnie muc sobie resztę
tej aplikacji napisać, także najpierw usuniemy ten styled components
stąd i uporządkuje trochę nasze app js, a właściwie przeniesiemy
go do właściwego folderu jeśli pamiętasz z poprzedniego kursu. No to react
ma pewną strukturę projektu, właściwie każdy może sobie wymyśleć inną, ale
my tutaj przyjmujemy taką samą konwencję jaką przyjęliśmy w poprzednim
kursie, dla przypomnienia tylko opowiem ci jaka jest to struktura. Przede
wszystkim w naszym folderze src stworzymy sobie teraz folder components.
Dodatkowo w folderze src utworzymy jeszcze folder
views i póki co na tym się zatrzymamy, później jeszcze w
dalszej części kursu dodamy kilka folderów, ale nie chcę na razie tutaj za
dużo kłaść do głowy, no bo nie ma sensu teraz i w ogóle używać także
przeniesiemy sobie teraz app js i nazwiemy go inaczej. W naszym folderze
views stworzymy sobie root, ponieważ nasze abdeapp js jest root'owym
widokiem, takim głównym widokiem plik app
css możemy sobie usunąć, podobnie
jak app test, na razie nie będziemy korzystać z testów, usuniemy
też index css, ponieważ inaczej zaimportujemy globalne style.
Możemy też wyrzucić całą zawartość tego co
znajduje się w app i wrzuciłem
tutaj na przykład tylko H1, sam
plik app js jest zmienimy na root js i teraz
poprawimy ten import. Musimy
zmienić tutaj nazwę komponentu, który eksportujemy, na root
i nasza
aplikacja działa. Nic się nie wywala także porządek
zrobiony, możemy przejść do dalszej części, póki nasz projekt jeszcze jest na takim
bardzo wczesnym etapie zaawansowania to chciałbym tutaj wprowadzić jeszcze jedno bardzo fajne
ułatwienie, a mianowicie absolutne importy, czyli takie, które nie będą
wymagały ścieżek relatywnych w tym miejscu, żebyśmy mogli z każdego
miejsca w naszej aplikacji importować rzeczy relatywne
do naszego src, czyli jeśli na przykład byłbym 5 folderów
niżej, to i tak ten import w tym miejscu wyglądałby tak, ponieważ
tym takim punktem pierwszym jest src, a w
nim mamy views root root. Jest to bardzo fajne, ponieważ
jeśli będziemy importować bardzo dużo komponentów w jakichś widokach, to wtedy moglibyśmy
się pogubić z tymi kropkami z ilu folderów wychodzimy i tak dalej, więc
zawsze w praktyce w takich większych projektach stosuje się w importy
absolutne i żeby to zrobić naprawdę nie trzeba wiele, wystarczy, że
stworzymy sobie plik kropka env, który znajduje się poza
naszym folder src, on się znajduje w tym głównym folderze i w
tym kropka env wpisujemy node path tak jak tutaj w ten sposób
równa się src. Jest to po prostu zmienna środowiskowa, która
jest przekazywana później do webpack'a który
obsługuje budowanie aplikacji Reactowej i kiedy on dostanie taką
zmienną środowiskową to będzie wiedział, że importy, które stosujemy
w naszej aplikacji właśnie odnoszą się do tego src i kiedy
to zapiszemy, wrócimy sobie do naszego index js,
to jak widzisz nasz aplikacja się buduje nie sypie błędu, natomiast sypie
błędem ESlint, ponieważ on nie rozumie importów absolutnych i musimy mu to dość
dobrze wytłumaczyć, więc teraz wejdziemy sobie do przeglądarki, zobaczymy co możemy z tym zrobić. Pierwszym
rozwiązaniem na jakie wpadłem to właśnie ten wątek w którym ludzie pytają
czy możemy importować rzeczy w sposób absolutny w React'cie
i tutaj jest taki fragment kodu, który powinien to rozwiązać. Zaraz spróbuję
go przykleić do mojej konfiguracji ESlint i zobaczymy co z tego wyjdzie. Generalnie
w takich przypadkach często warto iść po prostu za tym co ludzie piszą i zazwyczaj te rozwiązania działają.
Zaraz zobaczymy czy u nas działają, okej,
po dodaniu tej konfiguracji odpaliłem ESlinta i niby
nie rzucił tutaj błędem, natomiast tutaj nadal ten błąd widzimy i problem
może być taki, że po prostu ten ESlint związany z edytorem, który podświetla
nam kod się zawiesił, bo tak czasami bywa. Natomiast teraz
usunę te konfigurację i zobaczymy, czy wtedy
ESlint w konsoli rzucimy jakimś błędem tak,
czyli to jest ewidentnie dowód na to, że ta konfiguracja działa.
Ponadto sprawdziłem to w moim web storm'ie i tam również ten
błąd się nie pojawia, więc jest jakiś problem z Visual Studio Code, który po prostu
nie ogarnia tego, że powinien rezerwować te importy, więc to
co możemy zrobić, żeby trochę załagodzić sytuację, to sprawić, żeby ESlint w tym
Visual Studio Code nie rzucał nam błędem, tylko ostrzeżeniem. Możemy to zrobić poprzez
dodanie tutaj zasady import no-unresolved i dać
tutaj 1 i w ten sposób ten błąd zmieni
się w ostrzeżenie. Nie gryzie to tak w oczy, wtedy nie
jest to czerwone, poza tym jeśli faktycznie jakiś moduł nie będzie mógł zostać zaimportowany
to aplikacja po prostu się nie zbuduje, więc nie musimy się tym przejmować, a korzyść
z posiadania absolutnych importów jest tutaj dużo większa niż korzyści z tego,
że ESlint będzie poprawnie lintował nam tutaj importy,
okej, skoro z tym już się uporaliśmy, to teraz możemy przejść
do komponentu i stworzyć strukturę dla naszego pierwszego komponentu i będzie
to button, jak sobie
zerkniemy na nasze design'y, tam button'y mamy w dwóch rozmiarach i w dwóch
kolorach i to też również uwzględnimy w naszym komponencie, więc
teraz w folderze button stworzymy sobie, button JS i na
razie jedyne co mu damy background kolor, weźmiemy go sobie z tego komponentu, wyeksportujemy
to, zaimportujemy w naszym
widoku root'owym, pamiętamy
o tym, że mamy już importy absolutne, więc możemy wpisać po prostu components, button,
button, okej,
postawmy nasz projekt i zobaczmy jak to wygląda. Faktycznie nasz
button się pojawił i ma odpowiedni kolor, więc nasz pierwszy komponent został
stworzony, a w następnej lekcji pokażę ci jak możemy wykorzystać props'y które
podajemy do tego button'a, żeby wpływać na jego wygląd w sposób bardziej dynamiczny
i właśnie odpowiedni do tego jak stosuje się styled-components.