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 działają ścieżki zagnieżdżone.
Będzie to wyglądać następująco. Chciałbym tutaj po przejściu do użytkownicy, wiemy, że już szczegóły możemy
wyświetlić pod user, ukośnik np. 1.
Chciałbym do tego jeszcze dodawać sobie edit i wtedy żebyśmy przechodzili do trybu edycji.
Więc wróćmy w to miejsce i tutaj pod Edytuj, najpierw chciałbym wygenerować odpowiedni link.
Dlatego będę chciał, żebyśmy przeszli do UserItem i dokładnie tak samo, jak zrobiliśmy wyżej.
Zobacz.
Będę chciał tutaj wygenerować odpowiedni link.
Tylko tutaj będzie icon-edit.
I tutaj będę chciał, żebyśmy kierowali do takiej oto ścieżki, OK.
Później pokażę ci łatwiejszy sposób, jak można to robić, ale teraz powinno nam to już odpowiednio te ścieżki
generować.
I tutaj, widzimy, w lewym dolnym rogu, że będzie to user 1 edit.
No, z tym, że nie mamy takiej ścieżki skonfigurowanej.
Dlatego przejdźmy do routes
i pokażę ci jak tworzyć ścieżki zagnieżdżone.
Mógłbyś oczywiście zrobić tak i tutaj napisać edit. Natomiast troszeczkę się powtarzamy.
Możemy to zrobić w inny sposób i też jasno dając do zrozumienia, że jest to podścieżka tak naprawdę w tej
ścieżce.
Możemy tutaj podać coś takiego jak children.
Jest to tablica i w tejże tablicy podajemy kolejne ścieżki dokładnie w taki sam sposób, jak wyżej, czyli
np. path,
ale ważne jest to, że tutaj już nie piszemy edit, bo wtedy byśmy stworzyli ścieżkę globalną, czyli po prostu
nasza główna domena, ukośnik, edit.
Tutaj bez tego slash'a podajemy.
I to oznacza, że to będzie ścieżka, do której musimy doliczyć jeszcze to co jest tutaj, czyli user, jakiś
identyfikator i potem ukośnik, edit.
I chciałbym w takiej sytuacji wczytywać komponent, który się będzie nazywał UserEdit, który stworzyłem. Przy
okazji zauważ, że jak super się z tym pracuje. Podzieliłem sobie to na odpowiedni katalog i tak naprawdę,
dowolnej wielkości aplikacje, jesteś w stanie w ten sposób tworzyć.
Nie mamy za dużo kodu w jednym wybranym komponencie, no i o to chodzi.
OK, jeżeli zrobimy coś takiego, to zobacz, że teraz to już działa poprawnie.
Czyli możemy przejść do użytkownicy, do edycja i wczytuje nam się to tak jak powinno.
Albo przynajmniej tak, jak nam się wydaje.
Ok.
Jak widzisz, nie do końca to działa tak jak działać powinno i teraz,
dlaczego.
Otóż jeżeli tworzymy takie ścieżki i to jest też istotna rzecz, to ten komponent UserEdit. On się będzie
wczytywał.
No właśnie, nie tutaj w router-view, który podaliśmy w globalnym, ale w router-view u rodzica, do którego go przypisaliśmy.
Czyli jeżeli chciałbyś, żeby ta edycja się wczytywała w tym głównym widoku, to musiałbyś stworzyć zupełnie
osobną ścieżkę.
Natomiast, jeżeli stworzysz taką zagnieżdżoną ścieżkę, to wtedy będzie to wczytywane w UserDetails, bo to był moduł,
który tutaj się wczytuje,
ten komponent i w nim musimy stworzyć miejsce do którego to wpadnie.
To oczywiście zależy od twojego layout'u, bo może chciałbyś tę edycję wyświetlić, jako zupełnie osobną podstronę.
Ale może chcesz ją wyświetlić wewnątrz już istniejącego komponentu.
Więc ja będę chciał to zrobić w taki sposób.
Jeżeli tak zrobimy, zobacz, będzie to wyglądać następująco. Tutaj gdzie podałem ten router-view, tutaj się
wczytuje cały nasz komponent, z tym, że ważne jest to, że on nie ma dostępu do tych danych, które były tutaj
w tym głównym UserDetails np. do user, tylko w user edit musiałem te dane od nowa sobie tutaj pobrać.
Swoją drogą tutaj computed, to user, to już jest dobre miejsce, żeby zrobić z tego mixina, więc możesz sobie
to przetestować, dlatego że tutaj robimy to samo. Mógłbyś stworzyć nowy katalog mixins,
potem katalog users czy user i jego mixiny,
z tego powodu, że mógłbyś tutaj potem zaimportować i ustawić, robimy dokładnie dwa razy to samo, więc warto
byłoby pomyśleć czy by tego nie wyekstrahować gdzieś na zewnątrz. Przyjrzyj się na spokojnie jak wygląda User Edit.
W zasadzie nie ma tu nic, czego nie robiliśmy w tym kursie do tej pory. Troszeczkę to tylko zmodyfikowałem,
tak żebyśmy zawsze korzystali z mutacji. No i tak by to wyglądało.
Więc teraz jeżeli będę chciał coś edytować, jeżeli to tutaj zrobię, to zauważ, że jest to odzwierciedlenie oczywiście
wszędzie.
Jeżeli wrócimy
i przeszlibyśmy jeszcze raz, już nie pamiętam, który to był użytkownik, chyba ten. Nie, to będzie ten wiek
zaktualizowany. Zaktualizujmy sobie tutaj na 20, wracamy. Przechodzę do szczegółów.
Ma on 20.
I co ważne, tutaj w Vuex, moglibyśmy zobaczyć wszystkie zdarzenia i np. zrobić Time Travel
do pierwszego z nich.
Jak widzisz, tak by to wyglądało.
Możemy wrócić teraz tutaj, wykonać commit itd.
To wszystko działa.
Tak więc zapamiętaj jedno, że jeżeli tworzymy zagnieżdżone ścieżki, to robimy to w taki sposób, że tutaj podajemy children,
z tym, że musimy zwrócić uwagę na to, że wtedy ten komponent UserEdit będzie wczytywany w router-view tego
komponentu rodzica.
I to tak jak wspomniałem zależy od layout'u konkretnej aplikacji.
Tutaj będzie to wyglądać właśnie tak jak Ci pokazałem, OK.
To zatem tyle, jeżeli chodzi o zagnieżdżone ścieżki.
Zostało nam jeszcze kilka rzeczy do omówienia,
jeżeli chodzi o router-view, więc zapraszam do kolejnej lekcji.