Prosty i Nowoczesny Framework dla Vue.js
7 godz. 2 min · Vue.js · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW tym projekcie tworzyć będziemy praktyczny projekt - klona Wikipedii! Minipedia pobierze dane z prawdziwego źrodła danych, zewnętrznego API WikiMedia - będzie łudząco podobna do oryginału oraz współdzieliła najważniejsze funkcjonalności, takie jak dostarczanie treści w różnych wersjach językowych, możliwość wyszukiwania artykułów, czy pobieranie najpopularniejszych wpisów dla danego języka. Stworzymy także podstronę wyświetlającą za każdym razem losowy artykuł w danej wersji językowej.Zobaczysz też, jak dokonać migracji ze statycznej strony HTML na Nuxt - oraz jak tworzyć przykładowe komponenty podczas tego procesu.Dzięki temu wszystkiemu, dowiesz się jak wykorzystać nabytą wiedzę w praktyce.
Dzięki Nuxtowi dowiesz się jak optymalizować Twoje strony www z duchem idei progressive enhancement, dostarczając coraz to lepsze doświadczenia dla swoich użytkowników oraz tworząc aplikację napisaną w 100% w JavaScript, która będzie działała nawet wtedy, gdy użytkownik jawnie wyłączy go w przeglądarce! To wszystko za SSR (Server Side Rendering), dzięki któremu treści będą gotowe do konsumpcji już przy wstępnej, pierwszej odpowiedzi z serwera WWW.Oczywiście, ma to swoje implikacje na wydajność naszej aplikacji - sprawiając że Lighthouse czy optymalizacja pod SEO staje się coraz prostsza!
Czymże jest ekosystem danego frameworka bez wsparcia społeczności! Dlatego podczas tego kursu nauczysz się instalować i wykorzystywać różne pluginy i moduły, które zaoszczędzą Ci dużo czasu. Dowiesz się też, jak tworzyć własne moduły - które rozszerzą działanie Twojej aplikacji Nuxt w sposób czysty i zarządzalny.
Nuxt jest frameworkiem w którym pracujemy zarówno po stronie front-endu, jak i back-endu. W związku z czym, stworzymy swoje własne API (bazujące na express.js) które będzie pewnego rodzaju pośrednikiem pomiędzy API WikiMedia oraz Twoją aplikacją internetową.
W tym kursie, dowiesz się także jak tworzyć swoje własne Middleware'y - czyli fragmenty kodu wywoływane pomiędzy przechodzeniem między stronami, czy podczas innych zapytań HTTP.Dodatkowo, zobaczysz jakie narzędzia daje nam Nuxt aby tworzyć progresywne aplikacje internetowe, oferując wsparcie dla takich funkcjonalności jak np. animacje między przejściami pojedynczymi podstronami naszego serwisu.
Tajemnicze i18n - czyli numeronim odpowiadający angielskiemu słowu "internalisation" - odnosi się w kontekście web developmentu do tłumaczenia danych na różne języki. Podczas realizacji projektu Minipedii, nie tylko wykorzystamy standardowe podejście do tłumaczeń stałych elementów naszego interfejsu użytkownika, ale także przetłumaczymy same dane zwracane z API, wykorzystując inną wersję językową w zależności od preferencji użytkownika!
Poznasz też kilka ciekawych pluginów i rozwiązań dotyczących optymalizacji pod SEO - poza faktem, że podejście spełniające intencje użytkownika jest najlepszym, co możemy zrobić - pluginy generujące nam mapę stron automatycznie na podstawie zadeklarowanych przez nas podstron, czy generatory danych jsonld pomogą w pozycjonowaniu Twojej wydajnej aplikacji jeszcze wyżej w hierarchii wyszukiwarek.
Aby móc efektywnie korzystać z tego kursu, powinieneś posiadać średnio zaawansowaną wiedzę z kategorii Front End, z naciskiem na umiejętność posługiwania się JavaScriptem oraz solidne podstawy NodeJS. Konieczna jest znajomość Vue, jako że Nuxt jest frameworkiem korzystającym z niego u swoich podstaw. Jeśli czujesz się dość swobodnie w wyżej wymienionych aspektach web developmentu, ten kurs będzie idealny dla Ciebie.
Cześć! W tej sekcji będziemy mówić o tym, jak
propagować dane z backendu na frontend w sposób wydajny, w sposób zgodny z
Progressive Enhancement, w sposób, który będzie optymalny zarówno dla naszych
użytkowników, jak i wyszukiwarek czy przeglądarek.
W związku z czym zaczniemy z troszkę innej strony, a mianowicie od Store Stor.
Jest to takie główne miejsce, w którym
przechowujemy globalne dane dla naszej aplikacji.
Oczywiście możemy je podzielić na różne tory, na różne sekcje danego Tora
i domyślnym torem dla Nexta jest WRX WRX czyli.
Implementacja dla View Pattern Flags, czyli taki ekwiwalent Redux dla React.
A.
Ja nie jestem jakimś wielkim fanem WFS czyli DAX.
Natomiast jako że jest to dedykowana.
Droga tworzenia aplikacji, to oczywiście ją tutaj omówimy, więc
analogicznie do pozostałych opcji, które omawialiśmy na samym początku tego kursu.
Mamy tutaj sekcję Store i w tym torze
mamy oczywiście HDMI, które wskazuje nam do odpowiedniej sekcji w dokumentacji.
Clue tego jest takie, że możemy stworzyć
sobie tutaj nowy plik, nazwać go jakkolwiek chcemy.
I w tym momencie, gdy utworzyliśmy
pierwszy plik, my uruchamiamy WFS w naszej aplikacji.
Jeżeli ten katalog jest pusty nie ma.
Nasze bundle są lżejsze, natomiast
dając plik do katalogu store uruchamiamy Vegasa tak jakby go instalujemy.
W związku z czym tutaj mam taki przykład jak wykorzystywać store.
Więc ja po prostu go sobie tutaj skopiuję, żebyśmy nie tracili za dużo czasu.
Wkleję.
No i widzimy, że mamy eksportowane kilka różnych zmiennych.
Z tego są tutaj
zmienne takie jak STAT, czyli stan naszej aplikacji, gdzie trzymamy różne zmienne.
Następnie mamy
T1, czyli takie funkcje, które modyfikują ten wcześniej zadeklarowany stan.
No i generalnie
w Flags są jeszcze komitety czy akcje, które pozwalają nam wywoływać mutacje.
A akcje wywoływać.
Daje nam to dużo różnych ciekawych opcji,
takie jak na przykład historia modyfikacji danego stanu czy inne tego typu rzeczy.
My tu nie będziemy tego potrzebowali.
Jedyne czego my potrzebujemy to dostęp do Store, aby przekazać dane z backendu na
frontend w sposób wydajny i wygodny, więc zmodyfikujemy sobie ten stan
troszkę, zrobimy sobie example state i tutaj podajmy powiedzmy Hello.
Imię tej szansy możemy zmienić na priv tutaj dla.
Każdej z mutacji, którą eksportujemy dostajemy callback, który przyjmuje dwa
parametry i pierwszym parametrem jest ten właśnie nasz statek, który
zadeklarowaliśmy, a drugim jest nasza własna zmienna, która definiuje po
prostu to co będziemy przekazywać i c mutacji jest to aby
zmodyfikować stan, czyli jeśli mamy tutaj tri name na tym statusie.
To możemy zrobić to na takiej zasadzie, że status.
Kropka, egzamin, podstawę.
No to będziemy w stanie tutaj go zmodyfikować, np.
przypisując bezpośrednio do niego naszą wartość tekstową
i ja pozbędę się pozostałych mutacji, bo ich tutaj nie potrzebujemy.
Zapiszę.
I wracając do tego przykładu zobaczmy jak z tego korzystać.
Jak widzimy tutaj jest to jedyny plik,
który jest zdefiniowany w katalogu store i wewnątrz Page index.
Mamy wykorzystany tzw.
pytając co pozwala nam przekazać tę
mutację bezpośrednio do metod naszej aplikacji.
Możemy to w sumie zrobić.
Natomiast nie ma aż takiego tutaj parcia na to jak jest view kota.
No i wydaje mi się, że to jest po prostu jakaś kwestia
przebudowania aplikacji, a nie coś, czym my się musimy w tym momencie przejmować.
Zrobimy jeszcze jeden zapis.
I wygląda na to, że tak.
W związku z czym przejdziemy do Pages.
Przejdziemy do indeksu.
Już niedługo będziemy usuwać te zawsze zakodowane informacje.
Ten full info box z tym z tą tabelką już możemy pozbyć się w sumie na tym etapie.
No i przejeżdżając do treści naszego komponentu faktycznie tutaj możemy
zaimportować nasze MAF Promotions from WRX.
I w metodach, które nie wiem czy mamy
zadeklarowane akurat nie są zadeklarowane, więc zrobimy nowe pole news.
Możemy wykorzystać
mapkę Times, które będzie nam pobierało właśnie tę mutację z tego Store.
I tutaj pierwszym.
Fragmentem tego stringa, który tutaj przekazujemy.
Jest nazwa naszego pliku.
Musimy podać sobie tutaj indeks,
a następnie nazwę mutacji, którą tutaj eksportować.
Nie jest to zbyt silnie typowane.
Dzieje się to wszystko na stringach niestety.
XT trójka będzie poprawnie typowane, więc kopiujemy tutaj name.
I tutaj, i w tym momencie powinniśmy mieć możliwość zmiany nazwy.
Naszego stanu.
Z poziomu aplikacji.
Jednak zanim to zrobimy, wykorzystajmy tutaj.
Huk mam tez.
I wyświetlimy po prostu to co nam się
znajduje obecnie w stanie, czyli Console Log DS Store.
Tak, odwołujemy się do Store
i tak jak tutaj widzieliście mamy tutaj zadeklarowane stat, więc możemy
się do niego odwołać i wyświetlić sobie example.
Z tego.
Zapiszemy.
I tutaj wydaje mi się, że musimy przesunąć to w dół, bo tutaj mamy matmie tej szansy
i muszą się zamknąć w tym miejscu, więc teraz powinno to być ok.
Zapiszemy.
Aplikacja działa.
Nie daliśmy przecinka.
Zapiszmy i w tym momencie już przebudował.
A więc przejdźmy do naszego widoku.
I w konsoli powinniśmy zobaczyć naszą wartość stanu.
I faktycznie jest tutaj napisane Hello!
Czyli jeśli tutaj zmienimy w torze wartość jego początkową
czyli np naszą staty to już może być dowolna wartość.
Tutaj nie ma jakiejś restrykcji,
to może być obiekt, to może być cokolwiek tylko chcemy.
Nawet dane binarne, chociaż tego raczej bym nie polecał.
I powiedzmy, że ćwiczymy, żeby nauczyć się ponownie wykonało.
I faktycznie mamy tutaj 6.
W związku z czym jesteśmy w stanie odczytać dane ze Stora.
I zapis danych dostarcza.
Polega na tym, że tworzymy początkową
wartość stanu i po prostu go później modyfikujemy.
Czyli na przykład jeśli chcielibyśmy dostać się zapisać taki paragraf
w torze, to powinniśmy sobie zrobić na to tutaj tę sekcję summary.
Oczywiście też powinniśmy sobie
najpierw zadeklarować i dopiero później ją zmodyfikować na różnym etapie.
Czyli jeśli chcemy go zmodyfikować, to
w tym momencie możemy zrobić sobie store i tutaj zrobić commit.
Możemy też zobaczyć jak to się dzieje faktycznie w tym przykładzie.
Tak widzimy, że możemy dokonywać commitów, które modyfikują faktycznie wartość danego
stanu, więc przechowujemy to sobie po prostu, czyli dist commit.
I tak samo indeks name todo.
Moglibyśmy też po prostu wywołać.
Tutaj bezpośrednio the name, bo zmapować
to sobie do metod, ale zróbmy bezpośrednio kosmita.
Zapiszmy.
I dodaj to cudo musimy oczywiście zmienić na jakąś inną wartość, czyli powiedzmy.
Halifax State.
Zapisujemy.
Militaria.
Odświeżamy.
I widzimy, że jest tutaj 6x i drugi raz.
Jestem ciekawa czy to faktycznie jest kwestia opóźnienia w renderowaniu.
Czy kwestia, że ta wartość nie została zaktualizowana?
Jak możemy to sprawdzić? Całkiem prosto.
Możemy też po prostu wyrenderować tutaj jakąś wartość.
Jako że jesteśmy w klatce, możemy pozbyć się bez.
I teraz.
Zamiast logować to możemy zrobić test game.
I przekazać tutaj ponownie modified.
Ten commit powinien zadziałać tak na prawdę.
Chyba, że o czymś zapomniałem.
Zobaczmy.
Odświeżamy, jest state i się to nam nie zmodyfikowała.
Jestem ciekawy dlaczego
to powinno być reaktywne, to znaczy powinno się to zmodyfikować.
Zobaczmy jak to wygląda w przykładzie.
Add to do ustawia wartość na to.
Zobaczmy czy czegoś nie pominąłem w tym pliku.
A wszystko wydaje się ok.
Chyba, że modyfikujemy złą wartość.
Zobacz index examples tak wygląda ok.
Wydaje mi się, że tutaj problemem jest to, że mamy tutaj ten prefix index.
A być może jeżeli nasz plik nazywa się index to nie musimy tutaj tego
doprecyzować, tylko po prostu podać bezpośrednio nazwę stringa.
Więc sprawdźmy to w ten sposób.
I faktycznie zadziałało, w związku z czym możemy pozbyć się też
tutaj tego console loga i moglibyśmy bezpośrednio robić commit,
ale nie musimy, bo mamy już tutaj spakowane te mutacje.
W związku z czym widzimy jak zapisać dane do stanu do Store
i te informacje będziemy wykorzystywali po to, aby zapisać dane
w jakiś sposób do Store pobierając informacje z naszego API, który
wcześniej stworzyliśmy i później te informacje ze stara będziemy
przekazywać do odpowiednich komponentów, które będą wędrowały nasze dane.
Więc w kolejnej lekcji opowiem jak można.
Dostać się do naszego API
z poziomu backendu wewnątrz naszych komponentów View.
I zmodyfikować właśnie informacje, które znajdują się na naszej stronie.
Tutaj wyświetlane.
Zmiany wprowadzone w lekcji · 11 min
diff --git a/16/minipedia/pages/index.vue b/16/minipedia/pages/index.vue
index a4b4b7f..a56aedc 100644
--- a/16/minipedia/pages/index.vue
+++ b/16/minipedia/pages/index.vue
@@ -1,5 +1,6 @@
<template>
<article class="content">
+ {{ $store.state.exampleState }}
<h1>
Janusz Korczak
</h1>
@@ -8,46 +9,7 @@
<FullInfoBox :content="fullInfo" />
- <!-- <table class="box full-bio">
- <tr>
- <th colspan="2">
- Janusz Korczak
- </th>
- </tr>
-
- <tr>
- <td colspan="2">
- <figure>
- <img
- src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Janusz_Korczak.PNG/220px-Janusz_Korczak.PNG">
- <figcaption>
- Janusz Korczak, photographed c. 1930
- </figcaption>
- </figure>
- </td>
- </tr>
-
- <tr>
- <td>Born</td>
- <td>Henryk Goldszmit
- 22 July 1878</td>
- </tr>
- <tr>
- <td>Died</td>
- <td>c. 7 August 1942 (aged 64)
- Treblinka extermination camp, German-occupied Poland</td>
- </tr>
- <tr>
- <td>Country (nationality)</td>
- <td>Nationality</td>
- </tr>
- <tr>
- <td>Occupation</td>
- <td>Children's author, humanitarian, pediatrician, child pedagogue and defender of children's rights
- </td>
- </tr>
- </table>-->
-
+
<p>Janusz Korczak, the pen name of Henryk Goldszmit (22 July 1878 or 1879 – 7 August 1942), was a
Polish Jewish educator, children's author and pedagogue known as Pan Doktor ("Mr. Doctor") or Stary
Doktor ("Old Doctor"). After spending many years working as a principal of an orphanage in Warsaw, he
@@ -214,8 +176,18 @@
</template>
<script>
+ import { mapMutations } from 'vuex';
+
export default {
layout: 'default',
+ methods: {
+ ...mapMutations({
+ rename: 'rename'
+ }),
+ },
+ mounted() {
+ this.rename('modified state');
+ },
computed: {
fullInfo() {
return {
diff --git a/16/minipedia/store/index.js b/16/minipedia/store/index.js
new file mode 100644
index 0000000..7e0cf7c
--- /dev/null
+++ b/16/minipedia/store/index.js
@@ -0,0 +1,9 @@
+export const state = () => ({
+ exampleState: 'initial state'
+})
+
+export const mutations = {
+ rename (state, text) {
+ state.exampleState = text
+ },
+}
\ No newline at end of file