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, jak łatwe jest pracowanie z axios w połączeniu z Vue. Zobaczysz jak pobierać
dane i jak te dane wysyłać.
Więc mamy tutaj znajomą aplikację, natomiast po przejściu do użytkowników nic się nie wyświetla.
Wcześniej wstawialiśmy ich na sztywno do naszego Vuex'owego store'a za pomocą require bez użycia webpack'a.
Webpack, tak naprawdę, na etapie build'a, ten plik json'owy wstawał do pliku JavaScript'owego.
Teraz będę chciał te dane pobrać z użyciem AJAX'a, czyli właśnie za pomocą axios.
Ważne jest jednak to, żebyś przeszedł w terminalu do, w nowym oknie najlepiej, do katalogu servers, który
znajduje się w plikach źródłowych i w nim do katalogu 01.
Wpisz tutaj npm install, żeby zainstalować wszystkie zależności, a później aby uruchomić serwer wpisz
node index.js.
W ten sposób pod adresem localhost:3000 uruchomi się serwer, gdzie jeśli wyślemy zapytanie pod ukośnik users,
otrzymamy z powrotem json z użytkownikami, a jeśli wyślemy zapytanie post pod ukośnik login, to będziemy
mogli otrzymać z powrotem request,
taki token i ten token pozwoli nam jakby zasymulować logowanie, czyli to co robiliśmy wcześniej tutaj i przechodzimy
do edycji użytkownika, to wyskakiwało nam logowanie. Teraz sobie to zasymulujemy z użyciem serwera, więc taki
serwer, jeżeli jest aktywny to możemy przejść już do pracy.
Teraz jeżeli byśmy przeszli do Vuex'owego store'a, to zauważ, że tutaj wstawiłem users i jest to pusta tablica.
Musimy tutaj wstawiać te rzeczy, które chcemy tutaj później załadować, wiec mamy users i nasza aplikacja
działa poprawnie.
Natomiast się nie wyświetla nic, ale nie ma też błędu, bo mamy tutaj oczekiwaną tablicę i teraz będę chciał,
tutaj wewnątrz naszej aplikacji, pobrać sobie te dane AJAX'em, a jak więc dodamy jej created hook, kiedy ta aplikacja będzie
utworzona,
chciałbym wysłać zapytanie właśnie takie AJAX'owe, czyli tutaj jeżeli sobie zrobimy import axios from axios,
żebyśmy mogli pobierać dane, to zobaczysz jakie jest to proste.
Wystarczy wpisać axios.get, podać adres. Wpiszemy sobie http://localhost:3000/users.
I to nam zwraca promise.
Więc na promise'ach mamy tehn i podajemy funkcje.
Podam sobie funkcję strzałkową i wyświetlimy w konsoli co jest pod response.
Tyle wystarczy, żeby pobrać dane i zobaczmy czy to ma sens.
Tutaj po odświeżeniu, zobaczmy dane się pobrały i response jest to obiekt, więc dane, które konkretnie nas
interesują, znajdują się w response kropka data i to będziemy mogli stamtąd wyciągnąć, więc możemy tutaj
zrobić również destructuring.
Możemy napisać od razu data.
I tutaj będziemy mieli dostęp do tych danych, a my chcemy zrobić po prostu this store, żeby się tutaj
dogrzebać tak naprawdę do naszego store'a, który jest w tym miejscu. Następnie state.
Więc wróćmy w to miejsce, state users równa się data.
Czyli chcemy to wszystko nadpisać nową tablicą.
Zobaczymy czy nam to zadziała.
Ok, pojawił się tutaj jakiś błąd, zgadza się.
Jeżeli robimy taki destructuring, to musimy sobie to opleść taką parą nawiasów okrągłych, teraz powinno
być w porządku.
Zobaczmy.
Przejdźmy do użytkownicy i użytkownicy się wczytali, mamy jakieś błędy, ale jeżeli wyczyścimy sobie konsole
to wszystko powinno działać tak jak należy, czyli teraz do naszego Vuex'owego
store'a wczytaliśmy dynamicznie dane, natomiast, kiedy przejdziemy do Edycji, to być może pamiętasz, że
tutaj mamy taki token, który ja chce usunąć.
Przejdźmy teraz do components i do user login. W tym miejscu gdzie generowaliśmy sobie takie niby zapytanie
AJAX za pomocą setTimeout, chciałbym teraz wysłać prawdziwe zapytanie AJAX. Potrzebujemy axios.
I tutaj będziemy mogli sobie takie zapytanie, naprawdę, wysłać.
Czyli this.loading.
Za moment będziemy przestawiać, zróbmy po prostu axios.post.
To będzie zapytanie o typie post, zobacz jakie to proste, http://localhost:3000/login, taką
ścieżkę przygotowałem i chcemy tam przesłać wpisane przez użytkownika hasło.
Jak to zrobić?
Jest to bardzo proste. Chcemy do serwera wysłać password, więc tak nazwę ten klucz, a dane mamy pod this
password, po prostu, zostanie wysłane do serwera
i to co jest świetne to axios domyślnie działa z json'em, czyli on taki obiekt zamieni na json.
Nada odpowiednie nagłówki takie jak np. content type i będzie to application/json itd. Nic więcej nie
musimy robić, domyślnie działa to fajnie z json'em, więc wyślemy sobie takie hasło do serwera i na serwerze
nie sprawdzam czy jest poprawne, ale w odpowiedzi odsyłam token, więc then sobie zrobimy.
I znowu będziemy mieli response, więc znowu możemy zrobić destructuring i zrobić sobie samo data.
I tutaj będziemy chcieli ustawić sobie ten token, czyli stworzę taką oto funkcję i ten token, który ustawialiśmy,
może tutaj to nawet nazwiemy, chociaż nie, data, bo to będzie obiekt i tutaj zrobimy data token, OK. Ustawimy sobie
taki token i będziemy mogli
zrobić coś takiego i coś takiego, czyli to co mieliśmy wcześniej, będzie działać tak samo.
Możemy to zrobić w identyczny jak wcześnie kolejności.
OK, zobaczymy.
Jeszcze jedna ważna rzecz, oczywiście, tak jak to bywa w promise, tutaj możesz dodać blok catch, który przechwyci błędy.
Jeżeli będzie błąd, możesz również zareagować.
Teraz tego nie będziemy robić.
Odświeżmy tutaj raz jeszcze cały widok.
Przejdziemy do użytkowników, do edycji i wyskoczyło nam zaloguj się. Zobacz, jeżeli teraz wyśle jakieś
dowolne hasło.
Udało nam się zalogować i ten token powinniśmy tutaj mieć, bo tak naprawdę on został do nas przysłany,
jeżeli tutaj zobaczymy.
Wysłaliśmy zapytanie GET pod login i token został w takiej formie odesłany, a w konsoli gdybyśmy zerknęli
w terminalu, wyświetliłem otrzymane dane i tutaj wpisane hasło czyli moglibyśmy je na serwerze sprawdzić,
czy jest poprawne i tylko wtedy zwrócić odpowiedni token, oczywiście później każde zapytanie, które byśmy
wysłali, musiałoby analizować ten token, bo tak to działa, ale w tym momencie nie jest to istotne.
Zobaczyłeś zatem jak możemy pobierać dane za pomocą axios.get.
I jak te dane wysyłać, to co chcemy wysłać do serwera, podajemy po prostu jako drugi parametr, będzie to
zamienione na json i serwer, jeśli jest odpowiednio skonfigurowany będzie potrafił to odczytać.
Ok, zatem to tyle w tej lekcji, w kolejnej pokaże Ci jeszcze, jak możemy lepiej zintegrować axios
z Vue.