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
Teraz rzućmy okiem na to w jaki sposób działają nazwane widoki.
Dokładnie chodzi o router-view, czyli te miejsca, w które wpadają tak naprawdę nasze komponenty,
zależnie od tego, pod jakim adresem tutaj na pasku aktualnie się znajdujemy i przejdźmy do naszej aplikacji.
Najpierw do głównego widoku, zauważ, że my tutaj zrobiliśmy jeden router-view i on nie ma tutaj żadnych atrybutów,
chociaż takie można dodawać.
I co ważne, ten router-view będzie tzw. default'owym, czyli będzie to domyślny router-view,
a więc w naszej tablicy routingu, którą mamy tutaj, w routes.
Jeżeli definiujemy, że jakiś komponent ma się znaleźć pod takim adresem, to on się znajduje dokładnie
w tym miejscu gdzie mamy router-view.
Ale co ciekawe, możemy stworzyć więcej takich widoków i możemy nadać im nazwy, a następnie określić jaki
komponent, w którym z nich, się znajdzie.
I wyobraź sobie, że tę nawigacją chcielibyśmy stąd wyjąć, a w tym miejscu zrobić sobie router-view
i nadamy mu nazwę poprzez atrybut name.
Tak naprawdę te atrybuty, to są po prostu, properties, które wpadają do komponentu, a takim komponentem jest
router-view i nadamy mu na name np. header.
Teraz mamy już dwa widoki, default oraz header i możemy zdefiniować, co tutaj ma się pojawić i ja z tego powodu
przygotowałem tutaj, jeżeli przejdzie to components Home.
Coś takiego jak Home navigation i jak widzisz, mamy tutaj właśnie naszą nawigację, naszą templatkę. Dopisałem
tutaj functional, dlatego że ten komponent nie ma żadnego własnego stanu, czyli w zasadzie jest tylko
taka templatka.
I również dla użytkownika stworzyłem user navigation. W zasadzie niczym się nie różni tylko tym, że
tutaj mamy tylko link Home, a tutaj w Home navigation, home i użytkownicy.
To nie jest teraz istotne, istotne jest to, że będziemy mogli w to miejsce wstawić sobie nawigację Home
oraz nawigację user.
Więc teraz przejdźmy do routes i będziemy potrzebowali tutaj, gdzie mamy Home, zaimportować sobie HomeNavigation.
I mamy już teraz taki komponent i zobacz, w tym miejscu gdzie definiowaliśmy, że dla ścieżki głównej mamy
komponent Home.
Zmienimy to teraz na components i zamienimy to, po prostu, na taki oto obiekt. Napiszemy default
i tak naprawdę niewiele powinno się zmienić.
Będzie to działać tak samo jak wcześniej.
Jak widzisz, bo to oznacza, że do domyślnego slota, czyli do domyślnego router-view ma wpaść komponent Home, ale do header'a
chcielibyśmy wstawić header navigation, więc teraz wpiszemy sobie header i to jest zgodne z nazwą jaką nadaliśmy
tutaj, w atrybucie name i napiszemy sobie, że do header'a ma wpaść HeaderNavigation, ok, zapisuje i teraz po odświeżeniu
powinno nam to zadziałać. Tutaj widzę, że prawdopodobnie jest jakiś błąd.
Oczywiście to jest HomeNavigation. Zgadza się.
I teraz kiedy jesteśmy na stronie głównej, czy pod tą główną ścieżką, wygląda to w następujący sposób.
Natomiast jeżeli byśmy przeszli do użytkowników, nawigacja znika, z tego powodu, że tutaj gdzie mamy users,
nie zdefiniowaliśmy niczego dla właśnie tego slota i czasami, jak najbardziej, będzie to dla nas pożądany efekt. To
wszystko zależy od twojego layout'u.
Natomiast zróbmy sobie tutaj również rzecz podobną. Zróbmy components i default to będzie UsersList, a do
header chcemy wstawić UserNavigation. Oczywiście, również sobie ten komponent tutaj zaimportuje i w ten
sposób to będzie wyglądać.
I teraz po odświeżeniu tutaj będziemy mieli inną nawigację.
I zauważ, że to wcale nie musiałaby być nawigacja. Tutaj w headerze może chciałbym wyświetlić jakiś tytuł.
Może jakiś drop-down.
Nie ma to do końca znaczenia. Natomiast ważne jest to, że mając tutaj w głównej aplikacji stworzony jakiś layout,
tej naszej aplikacji.
Możemy stworzyć różne miejsca, gdzie będą mogły wpadać różne komponenty i te komponenty oczywiście sobie
stworzymy, a następnie za pomocą takiej tablicy routingu, będziemy mogli operować.
Czyli możemy powiedzieć, że po przejściu do users do domyślnego wpada z UsersList, a w miejsce header'a
wpada UserNavigation.
Oczywiście, nic nie stoi na przeszkodzie, żeby stworzyć sobie również footer i ten footer dynamicznie zmieniać,
w zależności od wybranej ścieżki.
Więc, jak widzisz, działa to teraz poprawnie.