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 z skonfigurujemy sobie Formik'a, który pozwoli nam na
poprawne funkcjonowanie naszego formularza. Oczywiście moglibyśmy to zakodować
samodzielnie od podstaw, ale formik czy React final form
to są takie biblioteki, które niewiele ważą a naprawdę bardzo ułatwiają
nam pracę z formularzami. Poza tym fajnie, żeby ci to pokazać, żeby po prostu żebym
mógł się tego nauczyć, więc pierwsze, co musimy zrobić to zainstalować sobie Formik'a w
naszym projekcie, okej i skoro
już nam się zainstalował, teraz możemy zerknąć sobie na dokumentację i zobaczyć,
że mamy tutaj takie dwa boilerplate'y z czego jeden jest bardzo długi, ponieważ
zawiera natywne elemente z html'a. Po prostu
musimy to wszystko wpisać sami. Natomiast formik udostępnia nam też komponenty,
które pomagają nam właśnie skrócić ten kod na przykład tutaj, jak field, czyli
pole albo error message, która wyświetla się pod naszym field'em,
więc to co teraz zrobimy to po prostu spróbujemy wykorzystać
sobie tą logikę, którą mamy tutaj i spróbujemy wykorzystać te gotowe komponenty,
które mamy tutaj, w taki sposób, że połączymy je ze stylem, ze stylami, które mamy w naszej
aplikacji. Zobaczymy jak nam to wyjdzie, jedyne co widzę, że może nam nie wyjść, to ten
tekst area, ale to sobie zostawimy najwyżej na koniec i najwyżej jakoś to tam poprawimy,
więc pierwsze co musimy zrobić to pobrać sobie formik do
naszego komponentu podobnie jak form field i
error message i następnie
to co widzimy to, że formik tutaj pod header'em już
odpala swój komponent, więc możemy go teraz sami zacząć pisać pod
naszym header'em i podawać mu odpowiednie
props'y, initial values to
po prostu obiekt, który ma elementy, które chcemy podać w
naszym komponencie. Mamy tutaj title,
content article url, twitter name
i created. Chyba o niczym nie zapomniałem, kolejnym
props'em jest validate i na
razie validate sobie ominiemy i podamy on submit, czyli
podajmy tutaj funkcję, która ma się wykonać w momencie, kiedy nasz
button submit się odpali. Podajmy tutaj values, czyli to będzie pewnie cały
ten obiekt uzupełniony w naszym formularzu i wydaje mi się że ten set submitting
jest opcjonalny chociaż nie jestem pewien.
Dobra, spróbujemy go też tutaj dać i to co chcemy zrobić to
wywołać tutaj add item w naszym page context
i wydaje mi się, że z values, ale nie jestem
pewien czy to tak będzie działać, więc pierwsze co sobie zrobimy to wylogujemy sobie values
i podobnie jak tutaj mamy
w przykładzie set submitting ustawimy na false. Zresztą zobaczmy
teraz co znaczy to set submitting. Pewnie będzie gdzieś w dokumentacji.
On nam po prostu mówi czy teraz submittujemy
czy nie. Wydaje mi się, że jak już po prostu wyjdziemy sobie z tej
funkcji, to nie musimy tutaj ustawiać, że skończyliśmy submittować.
No zobaczymy jak to wyjdzie. Wracamy sobie do naszego przykładu i skoro
on submit już mamy zrobione to teraz możemy przykleić sobie zawartość
naszego form'a do formik'a. Już
widzę, że on tutaj potrzebował set submitting po to, żeby ustawić
sobie is submitting, bo to jest powiązane jakby jedno z drugim set submitting
ustawia czy w momencie kiedy na przykład klikniemy button, mamy
go disable'ować, ponieważ się submittuje czy niech będzie włączony. Dzięki temu możemy zapobiec
temu, że ktoś wciśnie 10 razy button i 10 razy wyśle nam na
przykład notatkę, okej. Teraz musimy opleść nasz komponent
form, który zaimportowaliśmy sobie z formik'a,
to on submit możemy wywalić, ponieważ tutaj wystarczy,
że damy type submit i wtedy po
wykonaniu submit odpali nam się ta funkcja w tym miejscu i tak
jak już mówiłem to text area na razie sobie wywalmy, a spróbujmy
wykorzystać nasz styled input, ale
powiedzieć, że on ma się renderować jako film i wtedy
film może dostać jeszcze type, który będzie text i name, który
będzie title. Podobnie zresztą zrobimy tutaj w pozostałych
input'ach tutaj będzie to twitter name, a tutaj
article url, okej i teraz teoretycznie
zrobiliśmy wszystko o co formik nas prosił, więc
teraz jeśli odpalimy sobie naszą aplikacje trochę rozszerzymy,
żebyśmy widzieli konsole, po
dodaniu czegokolwiek tutaj powinniśmy zobaczyć to w konsoli jako values, okej. Niestety
to się nie udało sprawdźmy, co możemy zrobić, żeby
wykorzystać styled-components i formik'a. Okej,
widzę tutaj w tym artykule, że gość próbuje podobnie jak my wykorzystać formik'a
razem ze staled-components i on po prostu podaje te wszystkie props'y, które
formik wymaga w tym dłuższym przykładzie, więc wydaje mi się że my również tego nie
unikniemy. Możemy sobie teraz wrócić do naszego kodu i tutaj
gdzie podawaliśmy jeszcze submitting, musimy podać jeszcze kilka innych props'ów. Możemy
w takim razie wrócić sobie z naszym komponentem
styled text area, wywal
my sobie te field'y, które tutaj podaliśmy, w propsie has
i zerknijmy co musimy tutaj podać naszych input'ach
żeby one zadziałały, type mamy, name mamy, on change,
on
blur i value. Tutaj
mamy akurat twitter name, tutaj
będzie title i mamy
content, okej i teraz powinno zadziałać.
Dodajmy sobie cokolwiek i
znowu coś nie działa. Dobra
w takim razie spróbujmy sobie skopiować
treść tego błędu i wpisać w formik, zobaczmy na pewno ktoś wpadł już na ten
problem, okej. Wydaje
mi się, że problemem może być nazwa props'a, nie inititial value a nie values. Kolejna
próba, teraz nic się nie wywala. Uwaga
i na submit'ie dostajemy nasze
values, który jest obiektem i dodatkowo jest obiektem takim dokładnie jakim chcemy,
żeby było w naszej akcji do redux'a. Pojawił się jednak kolejny problem
wynikający z tego że teraz nasz form oplata te elementy,
więc musimy stworzyć sobie osobny styled component, nazwiemy
go styled form. On
będzie przyjmował w form jako argument. Musimy
po prostu powiedzieć że słuchaj, to jest nadal display flex z
kolumną. Teraz
jak sobie to podamy tu, okej
to nasz formularz wygląda z powrotem tak jak trzeba, więc
ostatnie co nam zostało to dyspatch'owanie naszej akcji, teoretycznie
to powinno działać, ponieważ te values, które przekazujemy są dokładnie takie
jak wymagane w naszym reducerze. No
spróbujmy czy to zadziała, taki mały eksperyment. Jak
widzisz nasza notatka została
dodana. Jeśli chcesz możesz skorzystać z dokumentacji
formik'a i wprowadzić tutaj walidację dotyczącą błędów, natomiast
my na potrzeby tego kursu nie musimy tego robić, powiedzmy że tworzymy taką wersję nvp,
gdzie po prostu tworzymy podstawowe elementy. Natomiast ta
dokumentacja w zupełności ci wystarczy, żeby te błędy tutaj wprowadzić, ponieważ
ona wykorzystuje tutaj error message i właściwie to jest jedyne, co trzeba dodać,
żeby to się zaczęło pojawiać pod naszymi input'ami. Ostatnią
rzeczą którą jeszcze możemy zrobić, to żeby po submicie zamykał
się, zamykała się nasza kartę i żeby to zrobić musimy odpalić sobie grid-template
i padać to handle
new item bar toggle, właściwie to to się powinno nazywać po prostu toglle new
item bar. Działa?
Działa. Możemy teraz to podać do naszego new item bar jako
handle close. Jak
wrócimy sobie do new item bar, zdestrukturyzujemy sobie handlu close
to wystarczy, że po tym add
item dodamy sobie te funkcje i ona
powinna zadziałać. Spróbujmy, dokładnie,
więc dotarliśmy
do końca naszego działu, gdzie zarządzamy sobie naszym stanem, dodajemy
i usuwamy notatki, możemy je dodawać, możemy je usuwać, wszystko działa, a w
następnym dziale zaczniemy to wszystko podpinać do backendu, który sami sobie skonfigurujemy
i postawimy, także najciekawsze przed nami.