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 jeszcze inne podejście do tego, jak możemy ten problem komunikacji rozwiązać i
skorzystamy z takiej globalnej szyny do komunikacji.
Jest to nazywane po angielsku Event Bus i często jest polecane i w wielu aplikacjach sprawdza się świetnie,
bo tymi lekcjami powolutku dochodzimy do tego czym jest Vuex.
Natomiast warto wiedzieć już teraz, że nie musimy w każdej aplikacji korzystać z Vuex'a, nie zawsze będzie
nam on potrzebny.
Więc warto znać również inne podejścia i teraz będę chciał pokazać, jak poprzedni przykład troszeczkę
zmodyfikować. Więc chciałbym po pierwsze w naszej głównej aplikacji.
Tutaj już na tym counterze nie nasłuchiwać, tak jak to robiliśmy poprzez progress toggleState tylko będziemy nasłuchiwać na zupełnie
innym miejscu.
Dlatego to będę chciał usunąć.
Metoda toggleState oczywiście zostanie.
Natomiast będę chciał to rozwiązać w ten sposób, że będziemy nasłuchiwali na zupełnie innym obiekcie.
Chciałbym sobie taki obiekt utworzyć, więc może w katalogu 08, gdzie teraz pracujemy w src, utworzymy
sobie coś takiego jak events i tutaj powiedzmy Bus.js tak sobie to nazwijmy i wyeksportujemy po prostu coś
takiego.
export const albo export default, może w ten sposób New Vue, ale tu musimy najpierw sobie Vue zaimportować,
import Vue From vue, czyli mamy taką technikę, która pozwala nam na stworzenie po prostu nowej instancji Vue.
I ta nowa instancja Vue, jak każda inna, będzie miała metody takie jak np. emit, z której korzystaliśmy w
poprzedniej czy np. on, więc na tym globalnym bus'ie, będziemy chcieli sobie nasłuchiwać.
Więc teraz jeżeli wrócimy do App, to będę mógł tutaj zaimportować, import nazwijmy to Bus from i tutaj będziemy
musieli napisać events Bus. Będziemy mieli dostęp dokładnie do nowej instancji utworzonej tutaj z new Vue.
I ona przy kolejnych importach w innych plikach będzie zwracana już nie od nowa new Vue, tylko dokładnie ta sama
instancja.
Powinno to zadziałać i teraz w naszej głównej aplikacji, chciałbym stworzyć sobie taki hook created, czyli
kiedy jest utworzony ten komponent konkretny, to będziemy chcieli na Bus nasłuchiwać.
Można powiedzieć wtedy Bus on. Bus jest po prostu instancją Vue i te instancje mają takie metody jak np.
on i będziemy chcieli powiedzieć on progress, wykonaj naszą metodę this.toggleState, po prostu.
Czyli teraz nie nasłuchujemy już na tym komponencie, tylko na nasłuchujemy na globalnym Bus'ie i taki sam import
będę chciał zrobić tutaj wewnątrz naszego komponentu.
Zobacz, tutaj ścieżkę będziemy musieli dopracować.
Czyli to będzie jeden katalog wyżej i będziemy chcieli emitować, nie bezpośrednio na naszym komponencie, tylko
na tym basieBus'ie właśnie.
Wydaje się, że niewielka różnica, ale różnica naprawdę jest spora dlatego, że teraz w dowolnym miejscu
w naszej aplikacji, jak za importuje Bus i na nim będziemy nasłuchiwać na zdarzenie progress to otrzymamy z
tego komponentu dane.
Natomiast, ciekawe czy nam to zadziała.
Może warto sprawdzić.
Nie ma żadnych błędów tutaj zmienimy wartość na mniejszą. Odliczamy.
Jak widać działa, bo ta lista select została wyłączona.
Czyli za pomocą takiego globalnego Bus'a również można się komunikować, a dzięki temu, że tutaj możemy
w tym workflow łatwo podzielić pliki na wiele różnych plików i katalogów, to można naprawdę fajnie z tym pracować.
Ooczywiście różne dodatkowe pliki dla eventów można byłoby sobie utworzyć.
Co ważne tutaj, również, można by było przecież stworzyć jakieś metody np. methods.
I tu można by było stworzyć metodę toggleState i dzięki temu jeszcze byłoby wygodniej, bo stąd nie robilibyśmy emit
progress, tylko Bus toggleState i przekazali byśmy wartość, a Bus wtedy w sobie zrobiłby this emit progress i
tę wartość.
Mam nadzieję, że łapiesz o co chodzi, w razie czego spróbuj sobie to napisać w takiej metodzie.
Czyli tutaj mogłoby być wiele, bardzo wygodnych metod, ale dzięki temu nieważne jak zagrożona będzie nasza
aplikacja.
W każdym komponencie będzie można ten Bus zaimportować i na nim zasób zasubskrybować sobie poprzez on, na jakieś
zdarzenie i powiedzieć jaka z moich metod ma być wtedy wywołana.
Dzięki niej dostosujemy sobie to wszystko i będzie bez problemu działać.
Natomiast pokażę ci w lekcji kolejnej jeszcze, jak możemy rozszerzać Vue, tak żeby ten Bus był bez importu
automatycznie dostępny na każdym komponencie.