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 konfigurację i poznawanie storybook'a oraz styled-components mamy
już za sobą to zaraz możemy przejść do kolejnego etapu naszego developmentu gdzie skupimy
się właśnie bardziej na tworzeniu komponentów, które później będą
nam potrzebne do stworzenia całego interfejsu naszej aplikacji i jak widzisz pewnie
tutaj po lewej stronie przygotowałem już kilka komponentów gotowych takich jak
na przykład heading czy paragraf, które są bardzo proste dlatego pominąłem
ten etap. Jeśli masz ochotę możesz napisać je samodzielnie, natomiast my zajmiemy
się bardziej zaawansowanymi rzeczami. Przygotowałem też input, którym za chwilkę się
zajmiemy oraz stworzymy sobie button icon, czyli taki baton
jak mamy w tym miejscu i on będzie również tym samym komponentem, który jest tutaj, jedynym
props'em, który będziemy tutaj zmieniać będzie ten tutaj, te
obramowanie, które będzie albo super okrągłe albo będzie takie tylko zaokrąglone,
ale nadal będzie kwadratem, więc zanim to zrobimy jeszcze takie
małe wyjaśnienie, ponieważ nie podawał nam theme provider
tego, co potrzeba do naszego storybook'a, to znaczy wszystkie rzeczy, które w naszych
komponentach odwoływały się jakoś do theme'u, w storybook'u były niezrozumiałe, więc
trzeba było to naprawić, dlatego w naszej konfiguracji storybook'a musiałem
dodać dekorator, który przyjmuje story jako argument funkcji,
a następnie właśnie posiada tutaj nasz theme provider,
który jest zaimportowany. On posiada tutaj props'a theme, którego
również importuje. To jest ten sam theme, który podajemy w naszej aplikacji
i to wszystko jest właśnie i to story, które tworzymy
będzie oplecione właśnie tym themeprovider, więc to takie drobne usprawnienie,
które po prostu pozwoliło na to, że możemy normalnie korzystać z theme
providera również naszym storybook'u, a przecież jest to niezbędne, żeby tworzyć nasze
komponenty, więc skoro to już sobie wyjaśniliśmy to teraz możemy przejść do tworzenia
input'a i tutaj mamy taką jedną rzecz. W naszych
design'ach widzimy, że mamy dwa rodzaje input'a, mamy taki zwykły login, na przykład, może
być to cokolwiek tak naprawdę i mamy też taki mniejszy, który będzie po prostu
search'em i teraz mamy tutaj przygotowany na razie tylko taki
ten zwykły na przykład do logowania input. Natomiast nie mamy search'a, a chcielibyśmy
żebyśmy mogli podać tutaj na przykład props'a search i jeśli będzie obecny to
nasz input będzie się zmniejszał i pojawi się w nim ta właśnie lupkę, lupkę
już tutaj wyeksportowałem, jest w plikach projektu, więc wystarczy
ją zaimportować do naszego input'a. Jak sobie
zerkniemy jeszcze na nasz storybook to zobaczymy, że ten pierwszy
już jest gotowy, tak wygląda nasz input, on działa, przy
okazji jeszcze pokażę ci co jeszcze przygotowałem. Tutaj mamy button'y, które już były
pokazywane, mamy heading duży i mały
i mam jeszcze paragraf, tak
jak mówiłem to nie są żadne fascynujące komponenty dlatego pominąłem
pokazywanie tego jak to się tworzy. Możesz podejrzeć, kod ma cztery linijki, także
bez problemu na pewno wszystko ogarniesz, a teraz przejdźmy do development'u
naszego input'a, więc to co możemy zrobić to wpisać
tutaj funkcję strzałkową i powiedzieć słuchaj, jeśli search jest obecny
to chcielibyśmy, żeby
również został zwrócony taki CSS. Teraz CSS musimy sobie
zaimportować tutaj ze styled-components i wpiszmy
tutaj na przykład, że font-size będzie mniejszy. Jeśli tutaj jest
eska, to my będziemy mieć x eskę. Na
pewno zmniejszy się też padding, który
będzie wynosił pewnie koło 10 i 20 pikseli, natomiast
po lewej stronie chcielibyśmy, żeby on miał pewnie gdzieś ze 40,
bo trzeba zostawić miejsce na lupkę i teraz z racji
że input'y nie mogą posiadać atrybutu before, ponieważ nie posiadają
żadnego contentu, dlatego musimy tutaj użyć background image i teraz
zaimportujemy sobie naszą ikonę. Zwykłym importem, możemy to
importować jak każdy inny komponent w taki sposób, na przykład magnifier icon
from i tutaj podajemy ścieżkę assets
magnifier kropka
svg i teraz, żeby ta ikona się pojawiła w background image, musimy
oczywiście zadeklarować background image. W tym
miejscu utworzymy sobie funkcję strzałkową, która
co prawda nie przyjmuję żadnego argumentu, ale za to zwraca właśnie nasze zaimportowane
magnifier icon, jeszcze tylko ustawimy, że background size
będzie wynosić pewnie koło 20 pikseli, background position ustawimy
na 10 pikseli, 50%, to jest oś X,
to jest oś Y i jeszcze możemy
dodać że background repeat, Oczywiście
moglibyśmy to napisać short hand'em. Natomiast ja zawsze lubię w taki sposób
bardziej explicit pokazać jakie właściwości przypisujemy naszemu
tłu, więc jest to po prostu moim zdaniem bardziej czytelny, ale jak
kto woli. Teraz sprawdźmy czy to zadziałało, musimy
dodać nowe story do naszego storybook'a, tutaj w tym miejscu. Zmienimy
sobie placeholder na search i dodamy tutaj props'a
search i teraz teoretycznie okej. Nie
pojawiła nam się ikonka, zaraz zobaczymy dlaczego tak się stało. Jest
dobry moment na to, żeby zobaczyć jak działa debugowanie, spróbujmy
tutaj wpisać URL, dopiero
to zamknąć w taki
sposób, okej nasza ikonka się pojawiła po prostu zapomniałem
tutaj dodać URL do background'u, a przecież on inaczej nie zorientuje
się, że jest to po prostu ścieżka referencje do tej ikony, którą zaimportowaliśmy. Na
pewno ta ikonka jest zbyt wielka, teraz jest lepiej i wydaje
mi się, że mogłaby być troszkę dalej, teraz jeśli
porównamy to z naszym designem to wygląda niemalże identycznie. Tutaj
też taka drobna uwaga, chcemy się zbliżyć jak najbardziej do tych design'ów, natomiast nie
będziemy tutaj stosować podejścia Pixel Perfect. Jeśli coś będzie delikatnie
w bok, delikatnie inaczej to nie będziemy sobie z tego powodu mi wyrzutów sumienia. Chcemy
te aplikacje przede wszystkim napisać szybko. Nie chcemy tutaj tracić czasu na tworzenie
Pixel Perfect layout'ów, od tego są prawdziwe projekty, w prawdziwej pracy.
My się po prostu uczymy React'a. Okej to na tyle w tej lekcji, a w następnej zajmiemy się
tworzeniem właśnie tych button'ów, zanim przejdziemy do tworzenia bardziej skomplikowanych
komponentów naszej aplikacji.