od Podstaw
7 godz. 6 min · Vue.js · Full-stack i Programowanie
Piotr PalarzWeb DeveloperAby zacząć korzystać z Vue, wystarczy dodać do strony jeden element <script> i zacząć rozszerzać HTML o nowe możliwości prezentacji danych, które w całości kontrolujemy z poziomu kodu JavaScript. Najlepsze jest jednak to, że gdy dane się zmienią, Vue odzwierciedli wszystkie zmiany na stronie. Koniec zatem z odwoływaniem się z poziomu kodu JavaScript do elementów z drzewa DOM i "ręczną" ich manipulacją!Czy łatwość użycia Vue oznacza, że jest to framework prosty i nienadający się do budowania ambitnych aplikacji internetowych? Absolutnie nie! Jeżeli potrafisz korzystać z workflow opartego na webpacku, znasz nową składnię ES6 i chcesz swoje projekty dzielić na wiele uporządkowanych plików - możesz w ten sposób pracować. Jeśli jednak przy innych frameworkach przytłoczyły Cię wszystkie dodatkowe narzędzia i nie potrafiłeś się skupić na najważniejszym, czyli poznawaniu frameworka, to tutaj tego problemu nie doświadczysz.
W kursie tym krok po kroku poznasz ten lekki, acz potężny framework. Zaczniemy od instalcji i obowiązkowego projektu "Hello World!". Dowiesz się czym jest "Virtual DOM" i dlaczego Vue z niego korzysta. Następnie zobaczysz jak kontrolować wybraną część strony internetowej za pomocą metod, właściwości i dynamicznych atrybutów. Aby zrozumieć reaktywność Vue, przyjrzymy się konstrukcjom języka JavaScript, które ją umożliwiają.
Aby aplikacja mogła być interaktywna, nie może być obojętna na działania użytkownika. Z tego powodu zobaczysz, jak przypisywać obsługę zdarzeń, takich jak np. kliknięcie, jak do funkcji przekazywać parametry oraz jak korzystać z natywnego obiektu Event. Nie zabraknie również informacji o tym, jak modyfikować obsługę zdarzeń tak, by np. przechwycić jednoczesne wciśnięcie wybranej kombinacji klawiszy.Jak się przekonasz, dyrektywy Vue pozwolą Ci na manipulację nie tylko zachowaniem, ale i wyglądem elementów HTML. Omówimy dokładnie jak kontrolować przypisywane klasy CSS, a także liniowe style. Wszystko to oczywiście na praktycznych przykładach! Poznasz również sposoby warunkowego wyświetlania elementów, a także iteracji. Już na tym etapie będziesz gotowy do stworzenia swojego pierwszego, praktycznego projektu. Będzie do Counter, a zatem licznik odliczający od 10 do 0. Jeśli kiedykolwiek korzystałeś z biblioteki jQuery, zobaczysz totalnie inne podejście - proste i czytelne.
W jednym z rozdziałów kursu omówimy dokładnie techniki pracy z formularzami. Zobaczysz jak przechwytywać wpisywane przez użytkownika dane, na wszystkich rodzajach pól, jakie oferuje język HTML. Abyś wszystko jak najlepiej zrozumiał, spróbujemy wspólnie zaimplementować tzw. dwukierunkowe wiązanie danych, które Vue oferuje za pomocą jednej dyrektywy.Z kursu dowiesz się także czym są oraz jak tworzyć własne filtry, jak odwoływać się do elementów z drzewa DOM, gdy jest to konieczne, a także co oferują nam własne dyrektywy.
Jedną z największych zalet frameworka Vue.js jest możliwość tworzenia komponentów. Są to własne elementy HTML, które możemy umieszczać w wybranych miejscach naszej aplikacji. Element taki to jednak nie tylko wygląd, który definiujemy za pomocą szablonu, ale także (a może i przede wszystkim) logika, kontrolowana z poziomu kodu JavaScript.Zobaczysz jak zarejestrować własny komponent lokalnie oraz globalnie, jak sprawić, aby był reużywalny, przyjmując różne dane oraz jak komunikować się pomiędzy komponentami, by aplikacja pozostawała w synchronizacji. W tym celu omówimy dwa kierunki komunikacji, najpierw rodzic-dziecko, a później dziecko-rodzic. Na tym etapie wykonamy bardzo ciekawy, praktyczny projekt. Będzie to tabela napędzana danymi. Każdy wiesz tabeli prezentował będzie dane jednej osoby, a kliknięcie ikony kosza pozwoli na jej usunięcie. Ikona edycji zaś, zamieni wiesz w pola input, za pomocą których zaktualizujemy dane. W projekcie tym wykorzystamy niemal całą wcześniej zdobytą wiedzę!
Vue.js oferuje możliwość animowania elementów, kiedy są one pokazywane lub ukrywane. I omówienia tego tematu nie mogło również zabraknąć w tym kursie. Poznasz sposoby na animowanie elementów w użyciem CSS, zobaczysz jak animować podmianę jednego komponentu na drugi, a także jak uzyskać taki efekt dla listy elementów. Mając już wiedzę z zakresu tworzenia własnych komponentów, stworzymy wspólnie element, który pozwoli na animację innych, zawartych w nim elementów. W tym celu zintegrujemy nasz komponent z biblioteką animate.css.
Przez większą część kursu pracować będziemy pisząc kod JavaScript w standardzie ES5, a więc tym najpopularniejszym. Nie będziemy również korzystać z żadnych skomplikowanych narzędzi. Wszystko to po to, abyś mógł jak najlepiej zrozumieć sedno Vue.js, a nie zastanawiać się, który zapis jest specyficzny dla tego frameworka, a który to część nowego standardu JavaScript lub syntactic sugar dodany przez narzędzie uruchamiane z poziomu terminala.Nie oznacza to jednak, że z Vue nie da się pracować w sposób nowoczesny! Oczywiście jest taka możliwość i doskonale się o tym przekonasz. W jednym z rozdziałów kursu omówimy narzędzie vue-cli, które pozwoli nam przygotować startowy projekt nowej aplikacji, a także środowisko skonfigurowane z użyciem webpack'a, które umożliwi nam wydajną pracę. Na tym etapie zobaczysz, że komponentu Vue można tworzyć w zupełnie oddzielnych plikach z rozszerzeniem .vue, gdzie umieścimy zarówno szablon jak i logikę komponentu, a także (opcjonalnie) jego style CSS.Kurs ten zwieńczymy stworzeniem nowoczesnej aplikacji, wykorzystując najnowszy zapis ES6 i workflow stworzony z użyciem vue-cli. Projektem tym będzie Slideshow, a więc galeria zdjęć. Stworzymy od podstaw kilka komponentów, dodamy własny preloader obrazów, a także możliwość pobierania listy obrazów z serwera. Do tego celu wykorzystamy popularną bibliotekę axios, która umożliwia łatwe wykonywanie zapytań HTTP. Pod koniec dodamy do naszej aplikacji również routing, aby na pasku adresu odzwierciedlać aktualnie wyświetlany obraz, a także umożliwić nawigację za pomocą przycisków "Wstecz" i "Do przodu" dostępnych w przeglądarce internetowej. To zadanie ułatwi nam bardzo popularny plugin dla Vue, który nazywa się vue-router. Zobaczysz jak go zainstalować, a także skonfigurować. Następnie omówimy dynamiczne parametry, które odczytamy w komponencie. Finalnie zaktualizujemy adres URL z poziomu kodu JavaScript.Ostatnim krokiem jaki wykonamy, będzie stworzenie builda produkcyjnego naszej aplikacji, który gotowy będzie do na stronę internetową.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i sposoby na pracę z Obiektowym Modelem Dokumentu. Aby go rozpocząć, nie jest wymagana znajomość innych frameworków, ale taka wiedza na pewno nie zaszkodzi, a pomoże lepiej zrozumieć te zagadnienia, które są dla nich wspólne. Nie jest również wymagana wiedza z zakresu EcmaScript 6 czy webpack'a, lecz na pewno będzie pomocna w ostatim rozdziale tego kursu. Nieważne zatem czy Vue.js będzie pierwszym frameworkiem, który poznasz, czy będzie to odskocznia od React'a czy Angulara - na pewno to narzędzie Cię zaskoczy!
Vue.js 2.5.x
W tej lekcji chciałbym krótko omówić koncepcję Virtual DOM, czyli
wirtualnego obiektowego modelu dokumentu z którego korzysta między innymi Vue js
i wielokrotnie w tym kursie jeszcze się przekonasz czy tak
naprawdę dopiero się przekonasz, że Vue jest genialne pod tym względem, że możemy
mieć jakąś strukturę html zapisaną w szablonie i później kiedy
zmienimy dane, które tam są wstawione, Vue będzie automatycznie zmieniać to na
stronie, ale nie będzie tego robił sposób taki bezmyślny jak
robiły to niektóre narzędzia kilka lat temu. Teraz większość nowoczesnych framework'ów
korzysta z wirtualnego DOM'u i tutaj chodzi o to żeby jak najrzadziej
i jak najmniej mieszać w obiektowym modelu dokumentu. Dawniej
nie było tego problemu, bo strony internetowe, które były składane po stronie serwera przylatywały
do przeglądarki w formie kodu HTML i tak naprawdę niewiele się zmieniało. Natomiast
obecnie cały interfejs użytkownika często jest wymieniany już
po stronie klienta albo generowany po stronie klienta z użyciem języka JavaScript,
a przeglądarki wciąż jednak nie najlepiej radzą sobie z tym zadaniem. Chodzi
o to, że jest to zadanie, które wymaga wiele zasobów. Zazwyczaj przeglądarki
są napisane w języku C++, ale nawet nie wnikając w to jak to
działa pod spodem, jest to ogólnie rzecz skomplikowana. Jeżeli chcemy coś
zmienić, chcemy zmienić tekst elementu li z poziomu kodu JavaScript, to
problem jest taki, że nasz kod JavaScript jest wykonywany w innym wątku bardzo
szybko, czyli interpreter javascriptu można powiedzieć że swoje zadanie wykonuje zazwyczaj
świetnie, ale w momencie kiedy w naszym kodzie odwołujemy się na przykład
do document get element by ID to wysyłamy można powiedzieć
zapytanie z poziomu kodu JavaScript do zupełnie innego świata, do świata,
który jest kontrolowany powiedzmy w C++, ale to tutaj nie jest istotne. Ale
jest kontrolowany przez zupełnie inne środowisko wewnątrz przeglądarki internetowej. Przeglądarka
wtedy może zmienić jakiś tekst, musi od nowa namalować to, co widzimy na stronie
i dopiero wtedy oddać nam kontrolę do javascriptu, więc to zadanie
naprawdę może być bardzo powolne i wyobraź sobie to co teraz tutaj
widzisz, w zasadzie po swojej lewej stronie. Mamy taką listę, mamy
kilka elementów li i powiedzmy, że z użyciem JavaScript o wygenerowaliśmy je z
tej tablicy, która jest po stronie prawej i teraz chcielibyśmy zrobić tak
jak będzie robiło Vue, że jeżeli coś się zmieni w danych tutaj w data to
chcemy to odzwierciedlić również na naszej stronie. Frameworki jeszcze
jakiś czas temu działały w ten sposób, że renderowały wszystko od nowa, czyli taką listę
za pomocą jakieś pętli, której ja już tutaj w kodzie html nie umieszczałem, ale
poznasz to w tym kursie, renderowały by to od nowa, czyli jeżeli zmieniły się dane,
cały widok załaduj od nowa, ale na przykład Vue będzie na tyle
inteligentnym narzędziem, że jeżeli w danej zmienimy tu coś tutaj na
element listy na przykład 5 to Vue będzie wiedziało, że należy
zaktualizować wyłącznie tekst w jednym elemencie dzięki temu działa to super
wydajny sposób, bo nie ruszamy pozostałych elementów w drzewie DOM, dodatkowo
są jeszcze inne optymalizacje, takie które sprawiają, że będziemy
jak najrzadziej dokonywać tych zmian albo w zasadzie jak najwięcej na raz, czyli nie za
każdą zmianą w danych Vue będzie od razu próbowało coś zmienić na stronie, ale
będzie te zmiany również kolejkowało, żeby na raz wykonać więcej, żeby przeglądarka
mogła na przykład zmienić na raz trzy rzeczy i raz tylko to wszystko namalować od nowa.
Niemniej jednak w skrócie, jakby taki wirtualny DOM mógł działać, nie
zagłębiając się absolutnie w to jak działa konkretnie, czy w Vue czy w innych framework'ach. Wyobraź
sobie, że chcielibyśmy odwzorować taką strukturę w kodzie JavaScript i
kiedy będziemy tworzyć własne szablony z użyciem Vue to dokładnie to
będzie robiło Vue. Vue kompiluje taki szablon i stara się go zamienić na
reprezentację JavaScript'ową, więc zaczynając od elementu na przykład div
app moglibyśmy sobie stworzyć jakiś komponent w kodzie
JavaScript, który miałby powiedzmy tag div. Powiedzmy,
że moglibyśmy zrobić coś takiego jak id to jest app i powiedzmy,
że zrobilibyśmy tutaj jeszcze coś takiego jak
children, ale to tutaj nie jest istotne. Chodzi o to, że w ten sposób moglibyśmy ten
element 1 w jaki sposób sobie w kodzie JavaScript
odwzorować, czyli w kodzie JavaScript jesteśmy ciągle, działa to szybko nie wychodzimy
tutaj do tego w ogóle DOM'u na razie, czyli wykonujemy wszystko w JavaScripcie i
pozostałe elementy moglibyśmy podobnie odwzorowywać. Może tutaj sobie zapiszmy
element li, powiedzmy, że dany element li odwzorowalibyśmy
w ten sposób, nie miałby żadnego id,
ale jego tekst moglibyśmy sobie zapisać jako element listy 1.
No i oczywiście jeszcze ważna rzecz musielibyśmy go skojarzyć z konkretnym elementem, który jest
w drzewie DOM, powiedzmy w ten sposób i tutaj mielibyśmy jakieś odwołanie do tego
obiektu i teraz dlaczego ci to pokazuje, dlaczego to jest takie ogólne tylko
wytłumaczenie, bo chodzi o to, że jeżeli coś byśmy zmieniali później w takich danych to
co może zrobić Vue, jak działa wirtualny DOM. Nie będzie tutaj sięgać
zupełnie, tylko najpierw wyrenderuje sobie wirtualny DOM, czyli na
podstawie danych utworze od nowa takie różne obiekty i za pomocą takiego
algorytmu div'ującego, czyli porównującego, te algorytmy mogą być
tak skomplikowane, porówna sobie snapshot tego wirtualnego DOM'u z tym
co wyrenderował od nowa, a przypominam, że to renderowanie jest super szybkie, bo ciągle jesteśmy w
wątku JavaScript'owym. Nie odwołujemy się poprzez żadne document create element, żadne
tego typu rzeczy, więc bardzo szybko możemy to porównać i w momencie kiedy porównamy
sobie snapshot z takim nowo wyrenderowanym DOM'em to będziemy
mogli porównać co się zmieniło, a co nie i wyobraź sobie, że właśnie w tym wirtualnym
DOM'ie zauważyliśmy, że na podstawie zmienionych danych, tak naprawdę zmieni
się tylko ten jeden element, a pozostałe będą wyglądać identycznie. Jeżeli dojdziemy
do takiego wniosku, to będziemy mogli odwołać się do elementu, który tutaj przechowujemy i
tylko jemu zmienić tekst na taką wartość jaka się zmieniła lub
zmienić na przykład atrybuty, więc tak mniej więcej działa Virtual DOM, a
więc jak najrzadziej sięgamy do obiektowego modelu dokumentu. Staramy
się kolejkować kilka zmian, żeby nie wykonywać pojedynczo wielu zmian tylko
kilka naraz i dodatkowo staramy się jak najmniej mieszać, czyli jeżeli
zmieni się jeden element listy starajmy się zmienić tylko jeden element li, który
ten element właśnie reprezentuje. Poza tym tyle, chociaż
to może wydawać się skomplikowane, to nie jest do końca istotne jak to jest zaimplementowane
pod spodem ale magię tego wirtualnego DOM'u przez cały ten kurs będziesz obserwował,
dlatego zapraszam cię już do kolejnych lekcji.