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 wygenerować linki, abyśmy mogli za pomocą tych linków nawigacji przeskakiwać
pomiędzy naszymi widokami, bo teraz jeżeli tutaj wpisze sobie np. users to to poprawnie działa i mogę wrócić.
Natomiast chciałem aktywować te linki i teoretycznie wydaje się, że wystarczyłoby tutaj dopisać na przykład
users.
Zobaczmy, po kliknięciu tutaj, jak najbardziej działa.
Natomiast nie chcemy tego wpisywać w ten sposób, bo później, jeżeli zmienimy tryb na HTML5 History API,
to nie chcemy mieć tego slash'a, dlatego zrobimy to inaczej.
Mamy specjalny element dostępny, który się nazywa router-link.
Jest to, jak widzisz custom'owy komponent oferowany przez VueRouter i on przyjmuje pewną prop.
Jest to tu i w niej podajemy ścieżkę, która koresponduje ze ścieżką podaną tutaj czyli np. slash i podamy sobie
treść.
Będzie to Home. OK, to sobie może wykomentuje.
Zobaczymy jak to będzie wyglądać.
Jeden taki link się nam już pojawił i on będzie działał poprawnie i zróbmy teraz to samo z users.
Co ważne tutaj oprócz do dosłownego takiego string'u będzie można podawać jeszcze obiekty konfiguracyjne,
ale o tym później.
OK, tylko teraz nam tutaj brakuje tak naprawdę, bo to działa, ale brakuje nam tak naprawdę tych styli, które
tutaj były, więc chciałbym dodać te klasy i zobacz.
Wystarczy, że do takiego elementu podasz klasę i ona automatycznie do elementu a, wewnątrz powinna zostać
zaaplikowana, OK.
Jak widzisz, tak dokładnie się stało. Gdybyśmy podejrzeli co tutaj jest, mamy wygenerowane linki a. Wszystko
działa tak, jak działać powinno. Natomiast jeszcze jedna ciekawa rzecz, o której chciałbym ci powiedzieć. Gdybyśmy
chcieli po przejściu pod odpowiedni link, podświetlać ten element, to zauważ że tutaj dodawane są klasy
router-link-exact-active i router-link-active. Natomiast tutaj ten powyżej ma też router-link-active.
No i teraz pytanie, którą z nich powinniśmy ostylować.
Już Ci mówię o co chodzi.
W momencie kiedy jesteśmy pod users, to ten link też dostaje klasę router-link-active, dlatego że on się
zaczyna od slash'a a ten też się zaczyna od slash'a
Czyli one jakby się zgadzają.
Natomiast możemy dodać taki atrybut exact,
który mówi, że to może być wyłącznie wtedy podświetlone, czyli w zasadzie tylko wtedy może być dodana
kasa router lub active.
Jeżeli ta ścieżka jest dokładna, więc jeżeli jesteśmy pod users, to do tej już to nie będzie dodawane, ale do
users tego nie dodam, dlatego że jeżeli będziemy mieli np. users ukośnik edit, to będę chciał, żeby
tutaj również była aplikowana ta klasa. Także zazwyczaj do tej głównej strony,
do tego slash'a dodajemy exact, po to, żeby ta klasa nie była tam dodawana i teraz mógłbyś ostylować te
klasy router-link-exact i router-link-active. Natomiast nie chcemy tego robić w ten sposób, tylko możemy je
zmienić. Po przejściu do Home,
zobacz, taka klasa też jest dodawana, czyli w zasadzie interesuje mnie tylko ta druga i teraz ja będę
chciał ją ustawić na tekst bold, bo w moich stylach jest to tak zdefiniowane.
Można to zrobić bezpośrednio na tym elemencie, czyli tutaj możemy sobie dodać taki prop router-link-active
i ustawić to na tekst bold. OK i to samo będę chciał zrobić w tym miejscu.
Zobaczmy.
Ok,
to nie działa.
Pomyliłem się, reuter-link-active to jest klasa, jaka jest dodawana, a tutaj prop nazywa się active-class, a drugi
jest to exact-active-class, gdybyś taką również chciał dodać. OK i teraz to działa poprawnie.
Taka klasa jest nadawana. Tekst bold, natomiast również router-link-exact
jest dodawana i żeby to zmienić, to musiałbyś tutaj napisać exact, pauza active class, ale
ona nie jest mi potrzebna, więc zostawię to w taki sposób.
No i jak widzisz, teraz to już działa poprawnie.
Natomiast, jeżeli nie będziesz chciał do każdego takiego elementu dodawać ręcznie takiego prop, to
możesz to zrobić jeszcze w innym miejscu. Mianowicie tutaj, gdzie konfigurowaliśmy router, podaliśmy mu routes, to
możemy podać więcej opcji konfiguracyjnych.
I mamy właśnie taką opcję jak linkActiveClass i tutaj możemy napisać tekst bold. Również mamy taką
opcję jak linkExactActiveClass.
Gdybyś chciał ją podać, ale sprawdźmy, czy nam to zadziała. Jeżeli byśmy to stąd usunęli z tego jednego.
Jak widać, działa również poprawnie, więc czasami lepiej jest dodać na taki router-link, bo wiem że np.
w tej sekcji taka i taka klasa jest klasą aktywną, a nie chcę żeby ona globalnie do każdego router linka
była dodawana.
Ale może, chcesz taką dodać do wszystkich.
Wtedy możesz to skonfigurować w taki oto sposób, OK.
I jeszcze jedna rzecz na koniec, którą chciałbym ci pokazać.
Może się tak zdarzyć, że będziesz miał listę ul i wewnątrz będziesz chciał wstawić taki router link
i nie chcesz żeby wewnątrz ul mieć element a bezpośrednio tylko, żeby on był w elemencie li.
Możesz to również zrobić, pokażę ci to może na tym przykładzie, wpiszemy router-link, czyli tworzymy taki
element.
Tutaj napiszemy może Home, tutaj napiszemy to, ok i możemy napisać tag. Jeżeli napiszemy tag li,
zobacz, co się wydarzy. Wygenerujemy sobie taką listę. Ona jest w tym miejscu. Mamy ul, mamy li i i to li będzie
też poprawnie działać. Jeżeli przejdziemy do użytkowników i kilknę tutaj z powrotem, to również to będzie działać.
Ja natomiast to usunę, ale warto żebyś o tym wiedział, że wtedy ten element to nie będzie a, tylko będzie
to element li.
No i w zasadzie na razie to tyle, jeżeli chodzi o generowanie tych linków.
Tak jak wspominałem, tutaj można podać jeszcze bardziej zaawansowane obiekty konfiguracyjne i będziemy
to jeszcze robić w kolejnych lekcjach.