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 zakończymy sobie wszystkie rzeczy związane z Reactor Router'em,
przynajmniej na ten moment. Zrobimy jeszcze tak żebyśmy mogli klikać faktycznie
w te karty i żeby one przenosiły nas do jakiegoś route'a
związanego z konkretną notatką co prawda tej notatki na razie nie
będziemy tutaj renderować, ten tekst będzie niezmienny. Co nie zmienia jednak
faktu, że trochę pracy jeszcze przed nami, więc pierwsze co chciałem zrobić to
sprawić, żeby sidebar zmieniał się kiedy wyświetlamy na przykład twitter,
to żeby ten sidebar był niebieski a nie żółty, wynika to
z faktu, że nasz komponent user page template
details template nie dostaję Page Type'u i moglibyśmy
to rozwiązać właśnie tak jak mówiłem w poprzedniej lekcji, poprzez nadawanie takie
bardzo imperatywne każdego props'a osobno, ale możemy to zrobić jeszcze inaczej, tylko
jedną rzecz musimy tutaj uspójnić i przeszkadzało mi to już przez jakiś
czas, więc teraz wydaje mi się że jest dobry moment żeby w końcu się tym zająć. Mianowicie
chodzi o to żebyśmy zmienili Page Type na
liczbę mnogą, żeby odpowiadała ona nazwą naszych route'ów, wtedy
będzie po prostu łatwiej nam się pracować, więc teraz po
prostu wszędzie gdzie mamy tylko Page Type, zrobimy sobie mały refaktoring,
przy okazji ten
page type tutaj w naszym sidebarze możemy sobie naprawić
w taki sposób, bo nie mieliśmy tego props'a podanego tak
jak powinien wyglądać. Tu przy okazji widzimy jeszcze jeden mały problem, array jest
zabroniony jako prop, wynika to z tego, że on jest bardzo ogólny, więc możemy zrobić coś takiego
jak array of prop Types Object i wtedy
mówimy że ten Children jest tak naprawdę tablica obiektów i powinien
się od nas odczepić. Tutaj możemy sobie usunąć te s, ponieważ już będzie mieć
liczbę mnogą. Okej i
ostatnie miejsce, które korzystało z tych nazw znajduje się w naszym template, w naszym
theme, przepraszam, więc
jak sobie otworzymy main theme, to tutaj musimy zrobić notes, twitters i articles i
w tym momencie raczej wszędzie już mamy uspójnione nasze
nazwy. Zerknijmy do naszej aplikacji, okej,
karty nam nie działają, zaraz zobaczymy dlaczego. Podajemy
Active Color do card type, okej tutaj jeszcze w
tym miejscu, czyli w naszych
widokach z notatkami twitters i articles,
teraz jeszcze w karcie tutaj
card type musimy zmienić i teraz
już wszystko powinno być okej twitter i ostatnia rzecz,
zawsze przy takim refactoringu zapomina się o bardzo wielu rzeczach. Okej,
jesteśmy w domu i teraz
jeśli otworzymy sobie nasze details page, to możemy sobie wyciągnąć
z niego takiego props'a, który się nazywa much i jak zerkniemy
sobie co ten match posiada. To
jest taki props, który otrzymujemy od React Roter'a praktycznie,
że gratis błędem o prop type na razie się nie przejmujemy,
natomiast zobaczymy sobie co my tutaj mamy logowanie w naszym konsol
log'u, mamy coś takie jak path i potem możemy identyfikować
czy ten widok jest związany z notatkami, artykułami czy
też na przykład twitter'ami. Jeśli sobie tutaj wpiszę articles, wejdziemy tu,
zobaczymy że mamy articles i teraz możemy stworzyć całkiem fajną logikę,
która nam pozwoli na takie dynamiczne pokazywanie albo chowanie
niektórych elementów naszego interfejsu na podstawie właśnie tego czy tojest artykuł, twitter czy
notatka. Pierwszym punktem, który musimy teraz odhaczyć, żeby tego
dokonać to unifikacja naszych w jednym z plików. Zazwyczaj
robi się to w src, tworzymy
tutaj folder routes i możemy stworzyć indeks js,
w którym wyeksportujemy sobie nasza route'y. Będzie to
obiekt i teraz wypiszę tutaj po kolei wszystkie route'y, które
nawiązują do tego co mamy w naszym root'owym widoku. Okej, skoro
mamy już ten obiekt stworzony, teraz możemy wrócić do naszego root'owego widoku i zaimplementować
sobie te route'y, które eksportujemy i skoro
to już tutaj mamy wpisane, teraz możemy wrócić do naszego details page
i pokażę ci o co mi chodziło, oczywiście moglibyśmy to wpisać po prostu string'ami,
ale takie przenoszenie powtarzających się wartości do
jakiegoś zewnętrznego zewnętrznego pliku jest po prostu łatwiejsze, pozwala
nam na unikanie błędów, więc teraz jak tutaj sobie zaimportujemy routes, sprawimy,
że details page w końcu zacznie wykorzystywać swój template w
odpowiedni sposób, więc tutaj to sobie wywalimy, wrócimy children o i tutaj
widzę, że jest jakiś bałagan. Coś mi umknęło naprawimy
tylko szybko te ścieżki, w porządku.
Teraz sprawdźmy czy to zadziała, fragment
możemy sobie wywalić, tutaj wrzucimy sobie na razie cokolwiek
żeby tylko zobaczyć czy ten template
zaczął działać. To
widzę jest jeszcze jeden mały problem, od razu go naprawimy w sidebarze, ołówek nam nie działa
jak jesteśmy na notatce. To na pewno jest przez
to, że tutaj mamy exact, bo każdy inny route działa normalnie, okej.
Naprawione i teraz
przy wykorzystaniu właśnie much path możemy
sobie porównać czy miejsce, w którym się znajdujemy odpowiada
na jakiś warunek logiczny, który sobie tutaj wrzucimy, więc na przykład
is twitter i możemy
sobie tutaj wrzucić math nie match
równa się routes twitter.
Tutaj
to musimy zrobić tak, bo inaczej ten boolean nam się nie
wyrenderuje, jest twitter false, ale jak
wejdziemy sobie na twitters 1, to mamy is twitter true,
więc za pomocą takiej bardzo proste i logiki
i możemy sobie teraz stworzyć bardzo fajne renderowanie
warunkowe. Jeszcze żeby udowodnić i sprawdzić czy to w ogóle działa
poprawnie pojedziemy sobie notatka, jest note true,
article, React tylko coś
nam nie działa w ogóle, zaraz zobaczymy dlaczego. No
tak, bo tutaj w wyniku wszędzie używamy liczby mnogiej articles true, więc to renderowanie
warunkowe będzie fajnie nam tutaj działać, ale zanim do tego przyjdziemy to jeszcze jedna
drobna rzecz. Do każdego card w naszych
widokach podaję id, te id ja tutaj dodałem i teraz
jest ono podawane jako key, ale możemy je też podawać jako id po prostu,
zauważcie, że dokonałem destrukturyzacji
tutaj props'ów, żeby było to po prostu ładniejsze, mamy notes twitters, w
ten sposób jak będziemy sobie do karty i powiemy,
że po kliknięciu ma
nas przekierować do konkretnego patha, do konkretnej ścieżki
to będziemy mogli właśnie zostali przeniesieni do notatki
o takim czy innym id i takim rekomendowanym sposobem na to jest
zaimportowanie znanego ci już redirect,
biblioteki react-router-dom, musimy tutaj stworzyć
klasę, która pozwoli nam na stworzenie state'u w funkcji render
zdestrukturyzujemy sobie nasze props'y okej
i mamy już przygotowaną klasę, a w następnej lekcji zajmiemy
się tym błędem z ESlint'a, który nie wiadomo skąd się wziął, a przynajmniej
tak może nam się wydawać oraz stworzymy sobie funkcję, która właśnie
pozwoli nam na zmianę state'u i renderowanie warunkowe kategorii naszego redirecta.