Techniki Zaawansowane
5 godz. 11 min · Vue.js · Full-stack i Programowanie
Piotr PalarzWeb DeveloperKurs, który masz przed sobą, to kontynuacja wydanego wcześniej kursu Vue.js od Podstaw. W pierwszym kursie omówione zostały najważniejsze koncepcje pracy z Vue, a w tym materiale poruszamy już bardziej zaawansowane tematy. Przede wszystkim skupimy się na pracy z użyciem nowoczesnego workflow, co da nam niezwykłą swobodę tworzenia aplikacji internetowych. Jeśli zatem znasz już podstawy pracy z tym frameworkiem i chcesz wskoczyć na kolejny poziom wtajemniczenia, ten kurs jest zdecydowanie dla Ciebie. A co znajdziesz w materiale?
Na początku zobaczysz, jak szybko tworzyć pliki startowe do nowej aplikacji z użyciem narzędzia vue-cli. Omówimy możliwość dzielenia kodu na wiele plików, tworzenia szablonów, a także wykorzystywania bezpośrednio funkcji renderującej, do której zamieniane są na etapie builda wszystkie szablony.Zobaczysz również czym są i jak pracować z komponentami funkcyjnymi i tzw. mixinami, które pozwolą reużywać raz napisany fragment kodu.
Przepływ informacji to bardzo ważny temat w każdej aplikacji internetowej. Vue oferuje kilka sposobów na to, aby komponenty mogły się ze sobą komunikować. Ich omówienie zaczniemy od najprostszych technik, które świetnie sprawdzają się w wielu przypadkach. Następnie rozszerzymy możliwości instancji Vue w ten sposób, aby wszystkie komponenty miały dostęp do scentralizowanego miejsca, gdzie przechowywany będzie stan aplikacji.Tam jednak, gdzie aplikacja wymaga zarządzania większą ilością danych jednocześnie, powyższe techniki mogą być niewystarczające. Z tego powodu, podobnie jak w innych frameworkach, Vue posiada oficjalny wzorzec oraz bibliotekę do zarządzania stanem aplikacji. Rozwiązanie to nazywa się VueX i w kursie zostanie ono dokładnie omówione. Zobaczysz zatem jak skonfigurować tzw. store, jak przechowywać w nim dane, jak je wyświetlać w widokach, aktualizować za pomocą tzw. mutacji czy pracować z nimi wykorzystując akcje. Przekonasz się, że początkowa większa ilość pracy, aby wszystko skonfigurować, w pewnym momencie zaczyna się opłacać.
Tworzenie nowoczesnych aplikacji typu SPA (Single Page Application) nie może się obejść bez zmian widoków. Dobrą praktyką jest, aby wraz z takimi zmianami, aktualizowany był również pasek adresu. Wykonanie takiego zadania umożliwiają nam tzw. routery. Vue posiada oficjalny dodatek o nazwie vue-router, który w tym kursie dokładnie omówimy.Zobaczysz jak dołączyć router do swojego projektu, a także jak konfigurować ścieżki. Poruszymy tematy takie jak generowanie odnośników, dynamiczne parametry, tworzenie zagnieżdżonych ścieżek czy nawigacja z poziomu kodu JavaScript. Dowiesz się również, jak tworzyć tzw. guardy, które umożliwią lub zablokują możliwość wyświetlania wybranego widoku, np. w zależności od tego czy użytkownik jest aktualnie zalogowany.
Trzecim, po zarządzaniu stanem aplikacji i wykorzystaniu routingu, komponentem, który niezbędny jest do tworzenia aplikacji napędzanych danymi, jest możliwość wysyłania zapytań HTTP.Tę czynność umożliwi nam bardzo popularna, acz niezależna od Vue biblioteka axios. Zobaczysz jak za jej pomocą pobierać i wysyłać dane. Aby jednak jak najwygodniej pracować z tym rozwiązaniem, połączymy axios z Vue, udostępniając tak naprawdę jej metody wewnątrz każdego komponentu.
W jednym z rozdziałów kursu podejmiemy temat walidacji formularzy. Zobaczysz jak z pomocą popularnego pluginu dla Vue, robić to w bardzo prosty sposób.Omówimy różne funkcje walidujące, które umożliwią sprawdzenie poprawności pól tekstowych, radio czy checkboxów. Zobaczysz jak w łatwy sposób wyświetlać komunikaty o błędach i warunkowo zmieniać wygląd pól. Nie zabraknie również informacji o asynchronicznej walidacji, która pozwoli nam na żywo sprawdzać czy wpisany adres email jest dostępny czy też nie.
Kurs ten oczywiście to nie tylko niezbędna teoria, ale także praktyczne przykłady. Aby jak najlepiej poznać omawiane techniki, wykorzystamy je do stworzenia ciekawych aplikacji.Pierwszą z nich będzie konfigurator produktu, który umożliwi użytkownikowi wybór podzespołów zamawianego komputera. Każdy taki wybór będzie wpływał na końcową cenę, która będzie na bieżąco aktualizowana. Po wybraniu wszystkich opcji, dane prześlemy na serwer. To projekt który pokaże Ci jak przechowywać dane z użyciem VueX, a także jak na ich podstawie wyświetlić widok i napisać logikę.Innym projektem, który wykonamy, będzie Quiz. To aplikacja, gdzie użytkownik odpowiadał będzie na serię pytań pobranych z serwera, a do wyboru będą 3 odpowiedzi. Po przejściu przez wszystkie pytania, wyślemy do serwera zapytanie, a ten w zamian zwróci nam listę poprawnych odpowiedzi. Dzięki temu pokażemy użytkownikowi, gdzie miał rację, a gdzie popełnił błąd. Aplikacja ta wykorzystywać będzie wszystkie najważniejsze techniki, tj. VueX, routing, a także Ajax.
Kurs ten jest dla wszystkich osób, które czują się już swobodnie w pracy z frameworkiem Vue. Jeśli zatem masz już solidną wiedzę podstawową lub przerobiłeś kurs Vue.js od Podstaw, to zdecydowanie jesteś gotów na poszerzenie swoich umiejętnośći w pracy z tym frameworkiem. Co ważne, doświadczenie w pracy z innymi frameworkami JavaScript nie jest tutaj wymagane, a jedyne co będzie bardzo pomocne, to znajomość nowej składni EcmaScript 6.
Vue.js 2.x.x
W tej lekcji pokażę ci czym są i jak działają akcje w Vuex.
Jest to rzecz dosyć prosta, powiem ci od razu, że akcje, to są funkcje, które możemy wywołać.
I one tak naprawdę robią jedną bardzo ważną rzecz, mianowicie comit'ują mutacje, więc zaraz zobaczysz jak
to wygląda. Ja do naszej tabelki dodałem możliwość usuwania wierszy i wygląda to w następujący sposób,
bo już po kliknięciu w taki przycisk, tutaj będę chciał wywołać metodę remove, która będzie miała przekazane
use.id.
Więc taką metodę chciałbym, żebyśmy teraz tutaj podali. Remove i tutaj, po prostu, będziemy mieli id.
Więc chciałbym po prostu na początek zanim stworzymy akcję, zacomit'ować sobie mutację napiszemy this.store
comit i napiszemy remove. Jako payload przekażemy tutaj id
równa się id, czyli w zasadzie można to nawet skrócić w taki sposób, po prostu, OK.
Taka akcja na razie nie istnieje, ale za moment sobie ją utworzymy.
Czyli tutaj jest remove.
Tutaj przejdziemy do store i mieliśmy mutacje. Stwórzmy taką, która się nazywa remove. Mamy state, mamy payload
i znowu będziemy chcieli wyszukać użytkownika z takim oto id i będziemy chcieli go tym razem usunąć.
Pytanie Jak usunąć użytkownika z takiej tablicy.
Otóż odwołamy się do tej właśnie tablicy state users i następnie do metody splice, która pozwoli nam usunąć
takiego użytkownika. Od tego indeksu jeden element chcemy usunąć.
Ta metoda splice, tablicowa jest przez Vue opakowana w taki sposób, że działa to wszystko również reaktywnie,
więc to powinno bez problemu działać.
Usuwam sobie Mateusza Nowaka. Znikną i w innym miejscu naszej aplikacji, gdzie wykorzystaliśmy dane również
z tego store'a, jak widzisz również to zniknęło.
Więc teraz pytanie po co nam akcja.
No, bo wyobraźmy sobie taką sytuację, że tutaj chciałbym wysłać zapytanie do serwera, powiedzieć mu, że
taki użytkownik czy wpis czy cokolwiek innego ma być usunięty i dopiero wtedy kiedy serwer usunie taki
element i odeśle mi informację, że się udało.
Dopiero wtedy chciałbym tutaj, móc to usunąć i mówiłem ci w lekcji poprzedniej, że mutacje nie mogą być asynchroniczne,
czyli tutaj nie możemy czegoś takiego zrobić.
Właśnie tak to zostało zaprojektowane, że mutacje muszą być chroniczne, dlatego utworzymy sobie po prostu
akcję.
Akcja comit'uje mutacje. Robimy to wpisując tutaj w actions i nazwiemy ją również remove, aczkolwiek dowolna
jest tutaj nazwa i ważne jest to, że ona jako pierwszy parametr otrzyma kontekst, a jako drugi otrzyma
również payload.
Czyli co to będzie context? Pod context
kropka state
będziemy mieli state i będziemy również mieli context kropka comit i będzie bez problemu działać.
Zauważ, że tutaj w ogóle nie pracujemy nad this, jeżeli chodzi o Vuex, tylko teraz zamiast robić comit,
to zrobimy sobie dispatch, czyli akcję się wywołuje za pomocą dispatch, czy też ona się nazywa remove i przekazujemy
jej id.
I teraz możemy w niej wykonywać asynchroniczne operacje, a taką operację sobie zasymulujemy poprzez
setTimeout.
Na pewno wielokrotnie z AJAX'a korzystałeś się jeszcze w tym kursie będziemy robić, więc w takich prostych
przykładach myślę, że nie ma sensu tutaj jakiegoś serwera stawiać, więc wykonamy setTimeout, który po
dwóch sekundach powiedzmy, będzie mógł to zacomit'ować tę mutację, czyli będzie funkcja, którą chciałbym
wywołać, po dwóch sekundach, context.comit nazwa mutacji, remove. To jest ta mutacja, pamiętaj, że te nazwy
tutaj mogą się od siebie różnić, jak najbardziej i payload, który będziemy chcieli przekazać, to jest
ten sam, który tutaj otrzymaliśmy.
OK, zobaczymy czy to ma sens.
Kliknę sobie usuń, OK, tutaj popełniłem literówkę,
setTimeout, klikam usuń i po dwóch sekundach ten użytkownik, jak najbardziej znika i wszystko działa
poprawnie.
Mógłbym tutaj oczywiście dodać jeszcze jakiś payload i tak dalej.
Czyli w zasadzie możesz zapamiętać, że jeżeli chcesz zmodyfikować stan w jakikolwiek sposób, możesz korzystać
z mutacji i robić tutaj comit.
Natomiast jeżeli będziesz chciał wykonywać asynchroniczne operacje, to musisz zawrzeć je w akcjach
i robić dispatch.
A tutaj możesz zrobić dowolną rzecz i później comit'ować.
Tutaj mamy też pod context.state dostęp do state'u, bo powiedzmy, że tutaj wysyłając zapytanie chcielibyśmy
znaleźć jakiegoś użytkownika, czy zrobić z tym cokolwiek.
Wtedy moglibyśmy się do context kropka state kropka users odwołać.
Natomiast możemy również tutaj zrobić sobie w ECMAScript6, co jest popularne link.
Czyli wiedząc, że tutaj będzie jakiś obiekt przyłożony, w którym jest state i comit, możemy zrobić comit
i sobie to wyciągnąć w ten sposób.
Bardzo często znajdziesz taki też zapis. Zobaczmy dwie sekundy.
Działa jak należy. Można również tutaj wyciągnąć kolejny parametr, jakim byłby state i wtedy bezpośrednio
masz do nich dostęp w taki oto sposób.
Ok zatem my jeszcze będziemy z tymi akcjami dzisiaj pracować w tym kursie.
Natomiast zapamiętaj, że akcje mogą być asynchroniczne, a ich zadaniem jest comit'owanie mutacji.
Natomiast my mutacje możemy również comit'ować bezpośrednio z naszego kodu. Natomiast samego state
nie powinniśmy w żaden inny sposób modyfikować niż za pomocą mutacji lub akcji.