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ść, jestem mega ciekaw jak udało ci się ostylować twój sidebar, mój
wygląda niemalże identycznie jak w naszym designie, więc wszystko
poszło, okej, podobnie jak uruchamianie zresztą aktywnej klasy
na odpowiednim route'cie. Jeśli pamiętasz z poprzedniego kursu to
musiałem tutaj w sidebarze użyć nie linka jak wcześniej to zrobiłem tylko nav link'a,
który może dostać innego props'a, którego link nie może dostawać
Active Class i to Active Class włącza się wtedy kiedy, podobnie
jak switch w routerze jakiś po prostu, jakaś
ścieżka pasuje do tej, którą mamy w adresie przeglądarki, więc jeśli mamy
tu i teraz to aktywną klasę dostaje nav-link odpowiedzialny
za przekierowanie właśnie do twitters. Musiałem tylko zmienić trochę
kod button icon, który w tej chwili po prostu przyjmuje
tutaj Active. Jeśli to Active się włącza właśnie poprzez
uruchomienie odpowiedniej ścieżki wtedy backgrount kolor
zmienia się na white, czyli biały. Ponadto zaimportowałem
logo, które ostylowałem w taki sposób nadając
mu odpowiednią wysokość, szerokość, importując ikonkę
logo jako właśnie background image nadając mu odpowiednią pozycję,
wielkość tego background'u i dodatkowo jeszcze oplotłem
linki w listę. Cały sidebar dostał oczywiście
Display Flex, Flex ustawiony jest w kolumnę, między
poszczególnymi elementami jest przestrzeń, ponieważ te elementy się
odpychają, a dodatkowo jeszcze dolny przycisk logout ma
margin-top auto, co sprawia, że te
trzy przyciski, które są zamknięte w listę są maksymalnie
odpychane od tego button'a. Jeśli chcesz oczywiście możesz
zerknąć w mój kod i porównać ze swoim. Mam nadzieję, że tobie poszło
równie dobrze. Teraz pora, żeby wsadzić ten sidebar
do naszej aplikacji i tutaj zaczną się schody, ponieważ
chcemy tutaj zrobić kilka dość istotnych zmian, ale zanim
pokażę ci poprawne rozwiązanie, chcę z tobą przejść przez wszystkie takie kroki,
które mogą nam pokazać gdzie można popełnić błąd, więc
pierwsze co zrobimy to wejdziemy sobie do naszego main template. Tutaj
zaimportujemy sidebar i osadzimy go
wewnątrz naszego main template'a i
pierwsze za co dostajemy po głowie od React Router'a
to fakt, że używam linków poza router'em, więc
jak sobie wejdziemy teraz do naszego root'owego widoku to zobaczymy, że template jest poza
routerem faktycznie. Nie może tak być skoro to template zawiera sidebar,
więc musimy zamienić kolejnością te komponenty. Teraz
jak widzisz pojawił się nasz sidebar, z
tym, że nie ma koloru. Dlaczego nie ma koloru? A no dlatego, że
themeprovider jest poza sidebar'em, więc
sidebar teoretycznie powinien znajdować się na
równi z children, a dodatkowo z racji, że theme provider może mieć tylko
jedno dziecko, musimy to opakować we fragment. Już
prawie jesteśmy gotowi, musimy jeszcze tylko w globalstyle uwzględnić
jedną rzecz, szerokość naszego sidebar'a to 150
pikseli nasz sidebar ma position fixed, więc
wszystkie elementy, które byłyby pod nim wskakiwały
bezpośrednio pod niego, ponieważ jestem wyjęty poza taki ogólny
layout, czyli nie wpływają na niego żadne inne elementy, on zawsze będzie tutaj przyklejony
do naszej lewej strony. Nawet jak będziemy mieć jakiegoś scrolla, dlatego tutaj
stąd ten padding 150 pikseli dla body naszej
aplikacji i mogłoby się wydawać, że to dobry pomysł, że
to co zrobiliśmy już ma sens. Natomiast nie wszystkie widoki w naszej
aplikacji mają sidebar, przejść na przykład ekranu logowania, którego nie mają,
więc osadzenie go w tym miejscu nie do końca ma sens. Jest
jeszcze trzecia droga, która moim zdaniem jest najbardziej racjonalna,
czyli stworzenie nowego template'u, który będzie template'm
właśnie z sidebar'em. Możemy
go nazwać na przykład user page template. Czemu
user page? Ponieważ to użytkownik będzie korzystał z tych stron po
zalogowaniu, więc stąd takie nazewnictwo. Wydaje
mi się, że ono jest dość fajne. Zaimportujemy
sobie React'a oczywiście i z
tak przygotowanym template'm możemy sobie teraz przejść do naszych widoków, artykułów,
notatek i twitterów. Zaimportujemy tam sobie nasz user page
template i w
ten sposób po poprawnym zaimportowaniu mamy nasz sidebar
tam gdzie potrzebujemy. Jak się wylogujemy jak
przyjdziemy sobie do route'a login, którego właściwie nie ma, ale to nic,
po prostu widzimy, że jeśli ten warunek nie jest spełniony,
jeśli te trzy widoki się nie wyświetlają to wtedy nasz sidebar znika. Dodatkowo
musimy jeszcze ostylować nasz sidebar tak żeby zmienił swój kolor w zależności od
tego na jakiej stronie się znajdujemy, więc podobnie jak mieliśmy w karcie card type
i mieliśmy tutaj takiego props'a. Jest w tym miejscu, tak
samo tutaj będziemy mieli Page Type. Jak
widzisz dodałem też weryfikację prop types, która jest dokładnie taka sama jak w
moim template, więc po prostu można ją skopiować i teraz na podstawie tego
Page Type będziemy
sobie stylowa znasz sidebar. Możemy sobie z zdestrukturyzować
page type w tym miejscu i podobnie
jak w przypadku karty możemy zrobić coś
takiego. Tylko,
że tutaj zamiast domyślnego białego damy sobie domyślny
żółty w razie gdyby coś się zepsuło. Lepsze to niż nic. Teraz
w style wrapper musimy zrobić Active Color Page
Type i skoro
tutaj już to wszystko dodaliśmy to teraz nie pozostaje nam nic innego jak podać konkretne
props'y w każdym z widoków. Tutaj
to będzie article, w twitterach to będzie twitter i w
notatkach to będzie note i podobnie
jak w komponencie karty możemy tutaj zrobić taką walidację, która pozwoli
nam uniknąć błędów w razie gdybyśmy zrobili gdzieś literówkę, okej
w ten sposób stworzony prop types uchroni nas przed jakimiś tam literówkami, a nasz
sidebar. Jak miał się stylować, tak się styluje, więc
wszystko mamy gotowe z tej strony, możemy ruszać dalej.