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 sprawić, żeby nasze komponenty były jeszcze bardziej reużywalne, czyli
żeby nie były tak ściśle związane z router'em.
I teraz co to znaczy, że one są z nim ściśle powiązane.
Zobacz, jeżeli przejdziemy np. do UserDetails.
Jest to taki ogólny komponent, który oczekuje, że otrzyma user, ale nie tak do końca, dlatego że w tym
momencie jest on jasno związany z router'em, czyli zakłada że route istnieje i tak dalej.
A więc na etapie tworzenia takiego komponentu. już zakładamy, że tego użytkownika będziemy pobierali właśnie
w taki sposób.
Natomiast. możemy zrobić rzecz inną. czyli nie odwoływać się tutaj do this route, ale otrzymać do tego
komponentu id,
jako prop, czyli po przejściu pod ukośnik user np. jeden. Otrzymamy tutaj takie id, jako prop i będziemy
mogli to w tym miejscu zwrócić.
Czyli chciałbym móc tutaj napisać po prostu this.is.
I zauważ, że to sprawia, że ten komponent już tak naprawdę nie wie nic o routerze i może być bardziej uniwersalny.
Tylko teraz on musiał tutaj przyjmować sobie props jako id.
I pytanie jak mu taki prop przekazać.
Otóż, jeżeli przejdziemy do routes i jest to widok UserDetails, czyli tak naprawdę jest to tutaj. Tutaj mamy
UserEdit, ale w zasadzie powinno być UserDetails, to jest jakiś błąd, z którejś z poprzednich lekcji.
Ok, to będziemy mogli do tego obiektu konfiguracyjnego dodać sobie jeszcze właściwość prop, ale może sformatujmy
to sobie w ładniejszy sposób, bo przecież jak najbardziej możemy to zrobić.
Będzie to tutaj dużo czytelniejsze.
OK i dodamy sobie coś takiego jak props na wartość true.
Natomiast to nam prawdopodobnie nie wystarczy, dlatego że mamy kilka router-view, ale możemy sprawdzić. Odświeżamy.
Tutaj przejdziemy do użytkownicy i do szczegóły.
Jak widzisz, działa czyli tutaj nam to wystarczyło, bo domyślnie te propy zostały przekazane, jeżeli powiem
props id, to generalnie oznacza tylko tyle, że parametry które były na tej ścieżce, a dokładnie tutaj jest
dwukropek id, mają jako props zostać przekazane do tego komponentu.
Natomiast w sytuacjach, w których mamy różne widoki, to możemy to kontrolować w niezależny od siebie
sposób, czyli tak jak tutaj mamy props, to moglibyśmy tutaj zrobić default np. true
i drugi, który mieliśmy nazwany widok. Przypomnę ci o co chodzi. Chodzi o te router-view.
Drugi nazywał się header, to możemy napisać header np. false, czyli w momencie kiedy tutaj będzie jakiś komponent
wczytywany do router-view o nazwie header, to nie chcemy, żeby były jako props przekazywane wszystkie parametry.
Oczywiście to zależy od ciebie.
Ja uważam, że ogólnie prawie zawsze super pomysłem jest, żeby to przekazywać, żebyśmy wewnątrz komponentów
nie musieli się odwoływać do this.$route.
Więc wystarczy, że tutaj zostawimy props.
I wtedy będzie to poprawnie przekazywane.
OK i teraz jeszcze zerknijmy, w którym komponencie korzystaliśmy z tego w podobny sposób. Będziemy to mogli również
zmodyfikować tutaj w Edit prawdopodobnie była rzecz podobna. Dokładnie, więc też przyjmiemy sobie props jako
id i oczywiście tutaj this.is,
wtedy będzie działać. Zobaczymy tylko jak to wygląda tutaj w tablicy routingu.
No właśnie pewnie z automatu nam to nie zadziała i tak być powinno, jeżeli sobie tutaj wrócimy do strony
głównej. Do edycji, zobacz, mamy błąd.
Z tego powodu, że tutaj w tablicy routingu też powinniśmy powiedzieć, że chcemy przekazywać props,
czyli tutaj gdzie mieliśmy Edit, dodamy sobie props true.
To powinno sytuację naprawić.
Jak widzisz, tak też się stało.
A więc wszędzie tam, gdzie chcesz, aby parametry były zamieniane na props i żeby twój komponent nie musiał
wiedzieć nic o samym routerze, możesz to zrobić dokładnie w taki sposób i zachęcam Cię do tego.