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 w jaki sposób stworzyć tablicę routingu, tak, abyśmy mogli poznać adresy URL do
odpowiednich komponentów.
Ja w tym celu przygotowałem troszkę większy widok niż mieliśmy do tej pory. W głównej naszej aplikacji,
ale zauważ, że tutaj nie ma nic skomplikowanego. Sam czysty kod HTML i w pewnym miejscu mamy to, co pokazałem
ci pod koniec poprzedniej lekcji czyli router-view.
W tym miejscu będziemy chcieli wstawiać dynamicznie komponenty.
Natomiast, zauważ, że na razie generuje nam to błędy, dlatego że nie zarejestrowaliśmy jeszcze poprawnie
żadnych ścieżek, więc jak uruchomisz tą aplikację, też będziesz miał błędy. Pokazałem Ci też w wersji poprzedniej,
że importujemy VueRouter i następnie mówimy Vue.use VueRouter.
Tutaj wszystko się zgadza, natomiast chciałbym to teraz przenieść do innego pliku. W katalogu 19 utworzmy
sobie taki katalog, który nazwiemy może router i tam stworzymy plik router.js i ja będę chciał sobie to
przenieść do tego pliku. Nic nie stoi na przeszkodzie, żeby to oczywiście zrobić. Tutaj to usuniemy, wstawimy to
w tym miejscu, ale żeby mógł się odwołać do Vue.use, muszę sobie jeszcze zaimportować
samo vue. OK i będę chciał w tym głównym pliku importować, po prostu,
może tutaj import router from i przejdziemy do router i router.js i obraz nie jest potrzebny.
Na końcu, zostawimy to w ten sposób, czyli jeżeli tylko to tutaj zaimportujemy, to ten plik się wykona
i automatycznie nam to wszystko ustawi.
Natomiast teraz chciałbym stworzyć w katalogu 19 i w tym router, plik routes.js,
tym razem to będą nasze ścieżki.
Ok.
I stąd będę chciał wyeksportować, export default.
Taką oto tablicę, w której będziemy mieli obiekty. Zaraz do nich wrócimy, natomiast to routes musimy podać
sobie w routerze. Mógłbyś to wszystko wpisać tutaj w jednym miejscu.
Nic nie stoi na przeszkodzie. Natomiast ja jestem zwolennikiem dzielenia kodu, gdzie tylko ma to sens
i gdzie będzie nam to upraszczało życie.
Dlatego tutaj będę chciał sobie zaimportować routes from routes z tego samego katalogu i będziemy je tutaj mieli
i następnie będę chciał z tego pliku router wyeksportować new
VueReuter. Jemu podajemy tutaj routes i routes.
Ale wiemy, że w ECMAScripts6 można zapisać to w taki skrótowy sposób, więc w zasadzie nawet taki najprostszy
zapis routes powinien nam wystarczyć.
Czyli w ten sposób tutaj, do naszego routera otworzyliśmy nową jego instancje.
Przekazaliśmy nasze ścieżki, które za moment uzupełniamy, jest to tablica, czyli mógłbyś ją tutaj wpisać,
również bezpośrednio i to wyesportowaliśmy.
Z tego powodu w tym miejscu, w którym importujemy router, będziemy mieli wyeksportowany new-VueRouter i to potrzebujemy
wstawić do głównej instancji, w ten sposób. OK i teraz błędy, być może zaczną znikać, jeszcze nie zniknęły,
ale jest już ich mniej. Jest inny błąd, bo teraz wystarczy przejść do routes.
W ogóle, co ja przygotowałem, przygotowałem widok główny.
Coś takiego.
I następnie UserList, czyli listę użytkowników podobną do tej, którą mieliśmy wcześniej.
Będziemy na niej później pracować i chciałbym teraz zrobić tak, że dla strony głównej ładujemy widok home.
Tutaj, w takim obiekcie konfiguracyjnym podajemy sobie path i taki slash oznacza strona główna, czyli w zasadzie
główna nasza domena i następnie piszemy jaki komponent, ma się wtedy czytać.
Chciałbym, żeby to był Home, ale odwołałem się do niego jak do zmiennej, a to znaczy, że ja ją tutaj potrzebuję
zaimportować. Stąd musimy sobie tutaj zaimportować nasze komponenty, czyli import home from będzie dwa
katalogi do góry, components i następnie Home.
Zobaczmy czy to ma sens. Po odświeżeniu, jak widzisz, nasz widok się 2czytał i on się wczytał dokładnie
w tym miejscu, jeżeli sobie na spokojnie zerkniesz, gdzie podaliśmy reuter-view.
Tutaj wczytał się nasz komponent Home.
Jest wszystko OK.
I zauważ, że tutaj jest dodawany taki hash. W jednej z kolejnych lekcji, pokażę ci jak to zmienić, natomiast na
razie będziemy pracować na tym hash'u i ścieżki będą dodawane tutaj np. users.
Dzięki temu Vue Router może odczytywać w przeglądarce takie zdarzenie on hash change i wtedy wykonywać pewne akcje, a my
możemy również klikać przyciskami wstecz i do przodu, bo domyślnie z takim hash'em to działa.
I w takim razie zaimportujmy tutaj jeszcze drugi komponent i będzie to UserList.
I będę chciał tutaj skopiować sobie ten obiekt i dla ścieżki ukośnik users, podamy UserList. Zauważ, że tutaj
żadnego hash'a się nie dopisuje. Absolutnie nie. Wpisujemy to w ten sposób, ok.
Po odświeżeniu jest wszystko w porządku.
Te linki jeszcze nie działają, bo w kolejnej lekcji pokażę ci jak je wygenerować, ale gdybyśmy tutaj przeszli
do users to powinien nam się ten widok tutaj wczytać. Jak widzisz, dokładnie tak też się stało.
Powinno to wszystko działać, czyli np. usuwanie użytkownika itd.
Szczegóły czy edycja na razie nie działają, bo chciałbym to zamienić w taki sposób, że po kliknięciu edycja,
przejdziemy do kolejnego widoku, ale tym się zajmiemy później.
Tak więc w ten sposób to wygląda, podsumowując, tworzymy tablicę, w której mamy obiekty i każdy taki obiekt
to jedna ścieżka. W nim mogą być inne opcje niż path i komponent.
Jeszcze jest ich kilka, później je poznasz.
Czyli mówimy pod jaką ścieżką i jaki ma być komponent i tą tablicę musimy sobie wstawić przy wywołaniu
new VueRouter pod routes, a ten vue-router musimy jeszcze wstawić do naszej głównej instancji, gdzie rozpoczyna
się nasza aplikacja.
I to wystarczy, abyśmy mogli korzystać z Reutera.
Natomiast w lekcji kolejnej pokaże ci, jak te linki, które tutaj widzisz, zamienić w taki sposób, żeby one
działały poprawnie.
Podpowiem Ci tylko tyle, że gdybyśmy w nich po prostu wpisali ukośnik users, też by zadziałało, ale jest
na to lepszy sposób, który będzie później również działał, kiedy zrezygnujemy z tego hash'a.