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 możesz animować przejścia pomiędzy widokami i zakładam na tym
etapie, że wiesz jak działa element trasition,
czyli jak tworzyć animacje.
Ja to bardzo dokładnie tłumaczyłem w kursie Vue.js od podstaw.
I teraz jeżeli byśmy sobie przeszli do naszego przykładu i do naszej aplikacji, to na samym dole dodałem
sobie style i te style będą odpowiedzialne właśnie za animacje, takie style będą przez Vue dodawane
podczas korzystania z elementu transition.
I normalnie z tego elementu korzysta się tak, że się oplata jakiś komponent, właśnie tym elementem.
I nie inaczej jest w przypadku router-view.
Możemy tutaj stworzyć element transition, w ten sposób i tym elementem opleść router-view.
I tutaj podamy mu oczywiście niezbędny name, w naszym przypadku name
to będzie ta nazwa, która jest tutaj podana w stylach, czyli ten przedrostek.
Będzie to slide. Dodamy sobie jeszcze mode i będzie to out-in, czyli najpierw wychodzi jakby ten komponent,
potem wchodzi kolejny.
To jest istotne tutaj, żeby ta animacja po prostu ładnie wyglądała i dodamy jeszcze atrybut appear.
Ten atrybut sprawi, że już przy pierwszym wczytaniu się tej strony będzie się taki komponent pojawiał,
więc zobaczmy czy tutaj ma to sens.
Po odświeżeniu on się od razu pojawia.
Jak widzisz, działa to tak jak powinno OK.
No i teraz jak będziemy sobie przechodzić, komponenty będą się zmieniać, to będzie on animowany. Zauważ,
że animuje się wyłącznie ten, bo dla tego górnego nie przypisałem żadnego transition.
Ok.
Ważne jest jeszcze to, że nie musisz oplatać całego router-view za pomocą transition.
Mógłbyś w komponencie, który Cię interesuje np. tutaj powiedzmy w UserList w jego templatce dodać transition,
czyli to transition może być dodane tutaj
i cały ten kod nim opleciony. Wtedy możesz sobie stworzyć inną animację dla każdego komponentu.
Ja natomiast chciałem to zrobić globalnie.
Jak widzisz, fajnie to działa. Jeżeli damy wstecz, przeskakujemy i nie ma z tym problemu. Natomiast pojawi się pewien
problem. W momencie kiedy przejdziemy do Edytuj.
I gdybym teraz chciał przejść pod adres, który jest identyczny, tylko zmienia się nam tutaj użytkownik,
to Vue
dlatego jest tak dobrze zoptymalizowane, że stara się wykorzystać komponenty, jak tylko może, więc w momencie
jeżeli na pasku zmienimy to na dwójkę.
Swoją drogą,
dlatego w tej lekcji nie korzystam z History API, tylko z hash'a, bo jeśli teraz wcisnę Enter, to strona się nie
przeładowuje, ale Vue wyłapie zdarzenie hash change.
A gdybym miał tutaj History API, strona przeładowałaby się i byśmy tego nie zobaczyli.
Ale jeżeli wpisze dwójkę, zobaczy że komponent się odmienił.
Ale tak naprawdę nie w całości, bo Vue tylko wykorzystało sobie te elementy templatki, które były już w drzewie DOM
i podmieniło w nich dane, więc nie wykonała nam się ta animacja i wyobraź sobie, że mielibyśmy tutaj jakąś
strzałkę, gdzie byśmy klikali i wczytalibyśmy kolejny, niekoniecznie edycję użytkownika ale np. wpis. Zmieniałby
się wyłącznie ten adres.
Ale nie zmienia się sam komponent, który jest zdefiniowany tutaj w routes,
czyli dla UserEdit jest to cały czas ten sam komponent. Jest on reużywany.
No i to jest właśnie problemem.
Aczkolwiek, żeby go rozwiązać to musimy sobie tutaj do router-view zbindować jakiś unikalny klucz.
W kursie podstawowym tłumaczyłem na czym to polega.
Dzięki temu Vue nie będzie reużywało tego widoku, tylko teraz skąd wziąć taki unikalny klucz.
Otóż możemy się odwołać do route, które tutaj mamy i do full path, full path to będzie pełna ścieżka w naszej nawigacji,
a więc jeżeli tutaj zmienimy na dwójkę czy trójkę, to każda z nich jest unikalna. Jeżeli coś takiego sobie zbindujemy,
to to powinno wystarczyć, żeby nam to działało poprawnie.
Zobacz, jeżeli teraz sobie to zmienimy na jedynkę, mamy animację, więc gdybym tutaj tak jak wspomniałem,
miał jakieś przyciski, które by przewijały te komponenty, to animacja będzie jak najbardziej tutaj pokazywana.
Jeżeli sobie wrócimy do users, jak widzisz, jak najbardziej to wszystko działa, tak jak powinno.
No i do animacji sobie możesz tutaj tworzyć.
Myślę, że nie mam tutaj nic więcej do dodania.
Jak widzisz, jest to prosta sprawa.