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
Czas rozpocząć konkretną pracę już nad naszym projektem i jak wspomniałem w lekcji poprzedniej zaczniemy od
pobrania danych i wystawienia ich do Vuex store'a.
Jak się dobrze przyjrzysz tej aplikacji, to ja już taki store utworzyłem gdzie mamy podzielone akcje, gettery,
mutacje itd.
Natomiast one, na razie, są puste.
Z wszystkich z nich będziemy korzystać w tym projekcie, natomiast w storze mamy coś takiego jak product
równa się null.
Chciałbym tutaj móc to nadpisać obiektem i teraz będziemy mogli zrobić, tutaj w aplikacji, przejdziemy do
created hook.
Czyli taki hook sobie stworzymy kiedy ta aplikacja się otworzy, to chciałbym za pomocą axios wysłać zapytanie,
a axios mamy skonfigurowane tak jak ci w tym kursie już uczyłem tutaj za pomocą vue-axios,
więc w zasadzie możemy sobie napisali this http następnie get podamy adres, pod jaki chcemy
wysłać zapytanie. To nam zwróci json, więc napisze then i tutaj będę chciał wyciągnąć samo data z
tego response i następnie ustawić to na this store.
Następnie state product równa się data, czyli kiedy się uda pobrać te dane,
to, po prostu, produkt w naszym storze, czyli dokładnie tutaj, będę chciał ustawić te dane, czyli po prostu
produkt z json'em, OK.
I teraz ten produkt chciałbym móc przekazywać, bo tutaj robimy taki komponent, ale jako prop chciałbym
żebyśmy do niego mogli przekazać tutaj właśnie product, on będzie przyjmował i dzięki temu tutaj będziemy
mogli na tym operować.
Więc chciałbym to przekazać, ale muszę zrobić najpierw computed property.
Więc tutaj mamy computed, nazwijmy to po prostu product i stąd będziemy chcieli zwrócić.
Też już to widziałeś this store state product.
Mam nadzieję, że piszesz razem ze mną. Jeżeli tempo będzie zbyt duże, to koniecznie sobie pauzuj i staraj się nadrobić,
wtedy najlepiej zrozumiesz te praktyczne projekty.
Czyli mamy tutaj taki computed property. Możemy go teraz przekazać.
Nazywa się product, chociaż ta nazwa może być inna, niekoniecznie taka jak computed property.
I tutaj przekazujemy produkt, OK.
I w tej aplikacji na razie to tyle, jeżeli teraz przejdziemy do produkt to będziemy mogli już zrobić v-if,
tak naprawdę, bo chciałem zrobić v-if.
Jeżeli produkt, to wyświetlamy to wszystko tylko wtedy kiedy jest on już dostępny, a nie ma wartości null, jak było w storze,
a w przeciwnym wypadku Twoje zamówienie zostało przyjęte.
Więc chciałbym sobie tutaj zrobić v-if product w ten sposób, ok.
Natomiast może lepiej będzie to zrobić nawet tutaj, u góry w v-if product, tylko wtedy, gdy to wyświetlamy,
a tutaj zrobimy, wyświetlimy to,
jeżeli nie zakończyliśmy jeszcze, not finished i coś takiego jak Vuex store'a będę chciał sobie dodać, czyli jeżeli
nie zakończyliśmy to wyświetlamy taki widok, jeżeli zakończyliśmy to wyświetlamy sobie właśnie to powiadomienie.
Dlatego chciałbym ten store uzupełnić. Dodamy tutaj jeszcze inne rzeczy takie jak właśnie finished. Ustawiamy to na
wartość false. Następnie będziemy potrzebowali selected, bo kiedy będziemy wybierać różne rzeczy tutaj, to
będę chciał je dodawać do takiego obiektu selected, więc to nam również będzie potrzebne.
I jeszcze cenę będziemy chcieli aktualizować, w zależności od wybranych parametrów, więc również tutaj
dodamy i na początku możemy ją ustawić na wartość 0, OK.
I to w zasadzie powinno nam wystarczyć.
Otwórzmy konsole, zobaczmy czy nie ma żadnych błędów. Jakieś się pojawiły.
No właśnie, property finished is not defined. Tutaj skorzystamy z finished, ale musimy ją jeszcze zdefiniować również
jako computed property, czyli tutaj dodamy computed finished
return this store. Następnie state finished.
Pamiętasz, że moglibyśmy tutaj z Vuex'a zaimportować sobie taką funkcję map computed albo mapGetters.
W zasadzie moglibyśmy tutaj to wstawić i wtedy mielibyśmy od razu this finished. Kierowało by to na dokładnie
taki zapis.
Ale jak mam tutaj niedużo takich rzeczy, to wtedy nie korzystam z tych funkcji, chociaż to już zależy
tylko od Ciebie.
Teraz błąd powinien zniknąć.
Tak też się stało i nasz widok działa poprawnie.
Natomiast w kolejnej lekcji zajmiemy się już tym, jak z tego json'a, którego otrzymaliśmy można wygenerować
cały widok. Podejrzyj sobie
tylko tutaj, że rzeczywiście w naszym Vuex storze, znajduje się wszystko co wpisaliśmy i także produkt, który
został pobrany właśnie za pomocą AJAX'a.