Szybkie i Nowoczesne Strony
4 godz. 29 min · ReactJS · Full-stack i Programowanie
Adam RomanskiFrontend developer & YouTube CreatorI tak i nie! Gatsby to faktycznie React wzbogacony o pewne supermoce. Na początku kursu dowiesz się, jak poprawnie ich używać. Opowiem Ci w jaki sposób zaszyto Reach Router we wnętrze Gatsbyego – zobaczysz, że to bardzo intuicyjne i wygodne rozwiązanie. Ponadto opowiem Ci, w jaki sposób tworzyć uniwersalne, globalne style i layouty dla naszej aplikacji, aby zaoszczędzić sobie pracy. W tym wszystkim pomogą nam pluginy przygotowane specjalnie dla Gatsbyego (psst! Czy wiesz, że Gatsby posiada ich ponad 1500?).
Nie masz konta na fejsie? Nie szkodzi! Facebook stworzył nie tylko popularną platformę społecznością (i Reacta 😎), ale także przełomową specyfikację dla GraphQL – języka służącego do komunikacji między klientem a serwerem. To właśnie GraphQL zasila Gatsbyego w warstwę danych. Nie ważne czy mówimy o obrazkach, plikach markdown, json, yaml czy po prostu API – aby to wszystko ze sobą pogodzić musisz znać GraphQL. A ja w tym kursie pokażę Ci, że korzystanie z niego to czysta przyjemność.
Na początku pomysł importowania obrazów przez GraphQL może Ci się wydawać przerostem formy nad treścią. Dlatego poświęciłem w tym kursie cały dział na to, aby pokazać Ci, jak potężne możliwości stoją przed developerem wyposażonym w GraphQL, Sharp Image Transformer oraz Gatsbyego. Zapomnij o skalowaniu, przerabianiu i dostosowywaniu obrazków ręcznie w programach graficznych. Sprytne rozwiązania w Gatsbym pozwolą Ci za pomocą paru linijek zoptymalizować zasoby wizualne dla twojej strony.
Zarządzanie treścią to krytyczny punkt wielu produktów cyfrowych – z jednej strony CMS (content management system) musi być użyteczny dla developera przygotowującego całą strukturę treści, ale z drugiej strony ich końcowym użytkownikiem zawsze jest edytor, który nie musi znać się na programowaniu. W tym kursie pokażę Ci, jak w dosłownie kilku krokach stworzyć wygodną w użyciu strukturę dla bloga w oparciu o pliki markdown. Z małym udziwnieniem. Będą to pliki MDX łączące prostotę plików markdown z potężnymi możliwościami Reacta.
HeadlessCMS to podejście, które może przywoływać na myśl horrory klasy B, natomiast ich działanie przyprawia o zachwyt rodem z komedii romantycznej. Gdy zobaczysz jak proste, intuicyjne i wygodne (zarówno dla developera i edytora) jest korzystanie z podejścia headless, już nigdy nie wrócisz do klasycznych CMS-ów. W tym kursie pokażę Ci to na przykładzie fenomenalnego produktu jakim jest DatoCMS, którego odkryłem podczas budowania dużej struktury informacji dla strony mojej firmy.
Deployment strony w Gatsbym zajmuje dosłownie kilka sekund, zwłaszcza jeśli użyjemy do tego odpowiednich narzędzi. W tym kursie dowiesz się, w jaki sposób Gatsby przygotowuje zasoby przed wysłaniem ich na serwer, skąd biorą się dane w Gatsbym oraz w jaki sposób wdrożyć gotową stronę za pomocą serwisu Netlify.
Ten kurs powstał z myślą o osobach, które chcą być na bieżąco ze zmieniającym się ekosystemem frontendowym. Kurs koncentruje się nie tylko na Gatsby.js, ale także na technologiach orbitujących wokół tej technologii, korespondujących z nowym trendem nazwanym JAMStack.
2.19.12+
Okej w poprzedniej lekcji udało nam się dodać tło do naszych miniatur
do postów natomiast teraz tak jak obiecałem pokażę ci rozwiązanie które
wykorzystuje gatsby image do tego żeby nasze posty wykorzystywały pełną
moc gatsby sharp plugin więc teraz
jak sobie odpalimy serwer deweloperski to
niech sobie leci a ja ci w międzyczasie pokażę jak to zrobiłem więc tutaj to src
które mieliśmy w poprzedniej lekcji zamieniłem po prostu na gatsby image sharp fluid tracedSVG
nazwa bardzo wpada w ucho wiadomo tutaj mamy w pages podobne
rozwiązanie już przypominam to już robiliśmy tutaj mamy dokładnie to samo w hero image
i teraz to fluid które
tutaj zaciągnąłem przekazuje jako nowy prop tym razem to jest image
czyli mamy featured image child image sharp fluid to
się bierze stąd że we front matter mamy
featured image czyli to co wyciągnąłem sobie tutaj w destrukturyzacji i
ona ma jeszcze zagłębione jakby dwa obiekty child image sharp i fluid
z racji że tutaj mamy fragment to tego już nie podajemy jako
propa wystarczy fluid przypominam ponieważ sam gatsby image
już przyjmuje właśnie fluid jako tego propa i on potrzebuje całego tego
efektu wykonania tego query można tak powiedzieć więc
tak zaimportowałem tutaj gatsby image wiadomo dałem mu kilka stylów które
pozwalają na to żeby on prostu wyglądał normalnie więc żeby nie wychodził poza obręb
rodzica w którym jest preview wrapper ten image
który podawałem tutaj podaję najzwyczajniej w
świecie jako jeden prop fluid i teraz jak sobie
zerkniemy na naszą stronę to nasza strona nie dość że wygląda równie pięknie
jak poprzednio to jeszcze teraz ładuje nam tracedSVG pewnie to widzisz przez
ułamek sekundy przez co nasze obrazki po prostu wyglądają super i
też bardzo szybko się ładują jakby ktoś wszedł z wolniejszym netem na naszą stronę
to na pewno doceni ten mały gest z naszej strony dobra ale od kilku
lekcji zajmujemy się tutaj miniaturami a tak naprawdę postów jeszcze nie mamy na naszej stronie
więc trzeba by było coś z tym zrobić i teraz właśnie stworzymy sobie taki
super prosty layout dla naszego postu który następnie będziemy wykorzystywać do
tego żeby programatycznie tworzyć nasze podstrony właśnie z artykułami
więc teraz może w layouts stworzymy sobie nowy plik który nazwiemy
post js to będzie zwykły
komponent react i tutaj warto dodać że to będzie traktowane podobnie
jak nasza stronę którakolwiek z folderu pages po prostu można
tak to nazwać ponieważ to będzie taki layout taki szablon ale zaraz pokażę ci jaki
feature wykorzystamy do tego żeby gatby właśnie traktował to równoprawnie jako
stronę więc teraz tutaj stwórzmy sobie post layout dobra
i w naszym poście będziemy mieć tytuł autora obrazek i treść naszego
postu na razie oczywiście to jest tylko taki mockup
zaraz
pokażę ci co możemy z tym zrobić wykorzystamy teraz jeden z najpotężniejszych feature
gatsby czyli programatyczne tworzenie stron jak sobie wejdziemy do pliku
gatsby node to możemy się przerazić bo tu jest pusto jest jakiś dziwny komentarz w
ogóle nie wiadomo o co chodzi ale nie bój się skopiowałem sobie tutaj z
tego komentarza link do dokumentacji i
dokumentacja tutaj nam się naprawdę przyda bo ciężko zapamiętać po prostu te wszystkie metody które
możemy wykorzystać w tym pliku różne rzeczy tutaj mamy natomiast my wykorzystamy
jedną bardzo ważną metodę nazywa się create pages create
pages pozwala nam na automatyczne tworzenie stron na podstawie jakichś
danych które wyciągnęliśmy sobie z jakiegoś bloga z jakiegoś api i z jakiegoś
cms z czegokolwiek więc teraz mogę sobie po prostu skopiować
całą zawartość tego przypominam jesteśmy na
create pages w dokumentacji gatsby link do tej dokumentacji
znajdziesz też jako link do lekcji wkleję zawartość
tej dokumentacji tutaj i przeanalizujmy sobie co my tutaj mamy path
oczywiście to jest moduł z node który pozwala nam na dostanie
się do pewnego miejsca na naszym dysku który będzie zawierał w tym przypadku
blog post template oczywiście my już taki
template mamy w folderze layout więc wystarczy że wpiszemy src layouts
post js to jest
nasza ścieżka to jest ten plik który przed chwilą stworzyliśmy on na razie
jest mockupem ale jest więc skoro istnieje to można go wykorzystać i
teraz pamiętasz jak używaliśmy w graphql który
nadal działa all mdx nodes tutaj również to query możemy
sobie skopiować ono będzie nam potrzebne możemy
je sobie nazwać na przykład query post
albo query articles różnica
jest tylko tutaj taka że w dokumentacji mieliśmy zapis z propisem natomiast
ja dużo bardziej wolę ten zapis async await który
różni się tym że po prostu jest krótszy i ładniejszy więc to co musimy zrobić to tutaj przed
nawiasami dodać słowo async tutaj dodać słowa
await jeśli nie znasz zapisu async await to gorąco zachęcam do
obczajenia kursu o javascript gdzie będzie to wyjaśnione natomiast
w gruncie rzeczy jest to bardzo podobne do tego jak byśmy mieli po
tym nawiasie kropka then i dalej jakąś akcję nazwijmy
to sobie result tak jak było tutaj na dole jeden
nawias jest tutaj zbędny i
teraz tak w data mamy trochę inny zapis bo w dokumentacji
używali innego pluginu my tutaj mamy all mdx więc mamy data all
mdx nodes i nodes
przypominam jest tablicą więc później już możemy robić sobie foreach żeby
to było bardziej intuicyjne to możemy sobie zmienić słowo klucz na post i
teraz tak musimy przeanalizować co się tutaj wydarzyło na razie chciałem przygotować
tylko jakby ten plik do działania a za chwilkę zobaczysz o co tutaj w
ogóle chodziła więc mamy metodę create pages która
zawiera pewne predefiniowane dane które możemy sobie wyciągnąć możemy
je sobie zdestrukturyzować pierwszą jest graphql czyli po prostu metoda którą
możemy wykorzystać do stworzenia query graphql to jest bardzo podobne
do importowania z gatsby po prostu graphql do tego żeby robić dokładnie to samo
tylko na przykład w pages i drugie to jest actions actions
to jest obiekt który zawiera pewne akcje jak sama nazwa wskazuje jedną
z takich akcji jest akcja create page która właśnie tworzy nam
nową stronę tak jak byśmy dodali do folderu pages nowy plik po prostu tylko robi
to automatycznie na podstawie jakich danych i instrukcji które my przekazaliśmy więc teraz
zrobiliśmy sobie query w graphql i ono zwraca
nam tablicę z pewnymi danymi skoro jest to tablica to możemy
sobie po niej iterować i przy każdej iteracji przy przejściu do każdego
kolejnego obiektu możemy wywołać metodę create page
czy też funkcję create page i jako argument podać tutaj kilka rzeczy
dzięki którym ta strona zostanie utworzona w poprawny sposób więc
zerknijmy co tutaj w ogóle zostało zawarte przede wszystkim
ścieżka i ścieżka właśnie zawiera ten slug który mieliśmy w każdym mdx to
dzięki niemu możemy utworzyć poprawną ścieżkę ponieważ ścieżka będzie właśnie tam
slash tidy or messy na przykład więc ścieżka
jest super ważna w tym momencie żeby ona była dobrze zapisana i my tutaj
mamy trochę inny zapis mamy tak post kropka front matter
kropka slug nie mamy tego node component czyli
to co tutaj zaciągleliśmy komponent to jest po prostu template do którego będziemy
wlewać treści z tego query które tutaj wyciągnęliśmy z
każdej strony którą bedziemy tworzyć przy pomocy właśnie funkcji create page
i tutaj jeszcze mamy takie specjalne pole które jest naprawdę mega
mega potężne ponieważ pozwala nam na przekazywanie
dodatkowych informacji zarówno do komponentu ale też co
bardzo nam się przyda do graphql query przypominam że post
js znajdujący się w layouts jest traktowany na równi z każdą
stroną to znaczy że można w nim wykorzystywać normalnie graphql query
w ten sposób i co więcej można w nim wykorzystywać zmienne o których
zaraz trochę więcej ci powiem i te zmienne właśnie będą przekawyzane
za pomocą tego kontekstu tutaj zaraz zobaczysz że to jest naprawdę bardzo proste tylko brzmi
tak skomplikowanie więc teraz przejdźmy sobie do oczywiście
wylogowania tego co się tutaj wydarzyło console log result
data all mdx nodes zobaczmy
co w ogóle dostajemy w wyniku tej naszej operacji tutaj na
razie tutaj zostaje pusty obiekt za
chwilkę będziemy się tym wszystkim zajmować musimy przebudować nasz projekt i teraz tutaj
w konsoli powinniśmy dostać wynik tego console loga uwaga zaraz
dostaniemy pewnie spory obiekt jak widzisz dostaliśmy
tutaj 5 postów i na podstawie tych pięciu postów zostały
stworzone strony jak możemy to sprawdzić skopiujmy sobie slug przejdźmy
do naszej strony i zróbmy slash comfortable
bedroom zauważ że został wykorzystany
po prostu nasz template od postów oczywiście on jest
pusty bo jeszcze nie wykorzystuje tych danych które tutaj przesyłamy natomiast one już tutaj zostały
zawarte więc naszym zadaniem w kolejnej lekcji będzie po prostu wykorzystanie tego template'u
i spropagowanie danych właśnie do niego żeby wyświetlić
nasz post