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 poprzedniej lekcji udało nam się stworzyć logikę, która pozwala
nam wyświetlać odpowiednie notatki po kliknięciu w odpowiednią kartę. Natomiast,
jeśli wejdziemy sobie w jakąś notatkę i odświeżymy to dostajemy sporo błędów. Wynika
to z faktu, że po odświeżeniu nasz store się zeruje i on już nie ma
tej notatki w swojej pamięci, więc jeśli ktoś wejdzie w taki
sposób do naszej notatki bo na przykład dostał od kolegi linka. No to mamy problem, ale
możemy go dość łatwo rozwiązać, tworząc sobie komponent, który
będzie zawierał dodatkową logikę chroniącą nas przed tym błędem. Sprawa
wygląda w taki sposób, że możemy sobie tutaj dodać component did mount i sprawdzać
czy this props active item istnieje i jeśli
item nie istnieje, wtedy możemy strzelić
sobie zapytaniem przez axios'a do naszego
API i teraz nasze zapytanie wygląda w taki sposób, że mamy tutaj note
i po note po slash'u mamy id, to id możemy podobnie jak tutaj wyciągnąć
sobie z match params id, więc
możemy stworzyć sobie konsta, który wyciąga nam id z this
props match params i w
tym miejscu po slash'u możemy sobie podać nasz id. Jeśli
wszystko pójdzie dobrze to wyciągniemy
sobie data i na razie zrobimy z niej console log'a. Jeśli
coś pójdzie nie tak, to również możemy sobie wyrzucić
efekt tego co się wydarzyło. Tutaj literówka w imporcie i teraz
zanim zaczniemy obsługiwać sobie to zapytanie, to jeszcze zejdziemy tutaj na dół, ponieważ mamy
mały problem. Nie można filtrować undefind, więc
możemy sobie zrobić coś takiego, że jeśli
nasz, nasza tablica na przykład twitters w state'ie
ma jakąś długość, wtedy
możemy zwrócić sobie to, co zwracaliśmy
tutaj, czyli active item, okej
tutaj mamy błąd, że length jest undefined, wynika to z tego, że w naszym initial state'ie
nie ma pustych tablic twitters, notes i articles, więc po
prostu sprawdźmy czy ta tablica istnieje w naszym state'cie, okej i
tutaj już chyba wszystko jest w porządku, bo
ten błąd bardziej dotyczy wydaje mi się tej destrukturyzacji, więc pozbądźmy
się na razie tego item. Stwórzmy sobie state w naszym komponencie, który
będzie właśnie miał nazwę active item. Początkowo on będzie null'em
i teraz sprawdzimy sobie czy
this props active item istnieje. Jeśli tak, to
niech active item w naszym state'cie będzie
właśnie równy temu active item z props'ów. Natomiast
jeśli nic takiego nie ma, to
robimy strzał do naszego axios'a, tutaj tego if'a możemy sobie wyrzucić
i tutaj jeszcze w funkcji render możemy
sobie teraz zdestrukturyzować active item, ale z naszego state'u, tutaj
każdy item musimy zamienić na active item, okej
i teraz jesteśmy już prawie w domu, bo to znaczy, że
ta logika tutaj powinna działać. Zaraz zobaczymy, co z tego wyszło. Spróbujmy
sobie wylogować this props active item.
Wygląda na to, jakby to w ogóle nie wchodziło
do żadnego warunku, który tutaj stworzyliśmy, okej,
po zmianie naszego active item na obiekt, który ma po prostu puste stringi.
Wszystko
wydaje się, wróciło do normy a ponadto
widzimy, że nasza logika zaczęła działać, ponieważ
mamy tutaj console log data, który właśnie nam wypluwa wszystko
czego potrzebujemy, więc teraz teoretycznie
tutaj w tym then możemy sobie stworzyć this state set state, gdzie
mówimy active item jest równy
data. I jak widzisz dane,
które zaczytujemy sobie z naszego API podmieniają nasz pierwotny
state w naszym komponencie przez co dane
na temat Dan'a Abramov'a się wyświetlają. Jak wrócimy sobie teraz
do naszego widoku głównego to
coś przestało działać. Sprawdźmy co tym razem, okej,
po odświeżeniu na widoku notatki mamy undefined jeśli chodzi
o this props active item, czyli o to przekazywany tutaj z tego miejsca. Natomiast
kiedy wchodzimy sobie do naszej notatki z poziomu dashboard'u, to
mamy faktycznie naszą tablice z jednym obiektem, więc mój błąd polegał na tym, że
w tym miejscu powinniśmy zdestrukturyzować sobie const active item z this
props i w tym momencie po prostu możemy zrobić coś
takiego i jeśli wyjdziemy
sobie z naszych twitter'ów, to znowu mamy błąd, ale
wydaje mi się, że chodzi tylko o to, że tutaj po prostu musimy dodać
active item i teraz uwaga, chwila prawdy i nasza
aplikacja działa poprawnie, czyli możemy dostać się do notatki z poziomu
dashboard'u możemy sobie odświeżyć stronę i również się załaduje, więc
nasze komponenty działają poprawnie.