ue.js on steroids - exxcellent solutions...steroid 2: vue.js devtools steroid 3: vuex (redux für...

114
ue.js on Steroids Wie man aus einem guten Framework noch mehr herausholt

Upload: others

Post on 08-May-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

ue.js on SteroidsWie man aus einem guten Framework noch mehr herausholt

Page 2: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Wer sind wir?

Page 3: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Christian Hunger @frozencoffee

David Müller @dav1d55

Page 4: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

David als Nuxt.js-Contributor

Page 5: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Projekterfahrung mit Vue.js aus einem mittelgroßen Projekt

Page 6: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

www.exxcellent.de

Page 7: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 8: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

eXXcellent solutions: Standorte

Darmstadt Ulm MünchenStuttgart

Page 9: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

</werbung>

Page 10: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Eine Übersicht über das Vue.js-Ökosystem

• Themen: u.a. Nuxt.js, Vuetify, Vue-rx, Vuex, Jest

• Konkrete Beispiele anhand einer Beispielanwendung

• Entscheidungshilfe: Kommt Vue.js für mein Projekt in Frage?

Vue.js on Steroids: Was bietet dieser Vortrag?

Page 11: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Eine Einführung in Vue.js Grundlagen

• Reines Vue.js als Basis, sondern Nuxt.js

Vue.js on Steroids: Was bietet dieser Vortrag nicht?

Page 12: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Beispielanwendung

Page 13: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 14: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

ue.js on Steroids ShopSupplements that make you a web development god

Page 15: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 16: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 1: Vue CLI

Page 17: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI: Anwendungsgebiete

• Guter Einstiegspunkt zum Kennenlernen des Frameworks

• Generierung einer Projektstruktur anhand von Templates

Page 18: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI: Nuxt & Vuetify Template

vue init vuetifyjs/nuxt app

Page 19: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI: Nuxt & Vuetify Template

Page 20: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI: Nuxt & Vuetify Template

vue create appvue init vuetifyjs/nuxt app

Page 21: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 22: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 23: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 24: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI v3: vue ui

Page 25: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue CLI v3: vue ui

Page 26: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 2: Vue.js Devtools

Page 27: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 28: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 29: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 30: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 31: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 3: Vuex(Redux für Vue.js)

Page 32: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

ZustandAnwendungslogik

UI

Vuex: Einordnung

Page 33: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

ZustandAnwendungslogik

UI

Vuex: Einordnung

Page 34: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• State Management á la Redux (Flux-Pattern)

• Zentraler Store, der den von verschiedenen Komponenten gemeinsam Zustand der Anwendung enthält

• Klar definierte Schnittstellen, um Zustand zu verändern und zu lesen

Vuex: Einführung

Page 35: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 36: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 37: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Store

Page 38: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Store

Page 39: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Store

Page 40: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 41: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Verändern (mutieren!) den Store

• Unterschied zu (Redux-)Reducern (previousState, action) => newState

• Müssen synchron sein

• Aufruf: store.commit(Mutation.UPDATE_ARTICLE, { articleId: 42, … })

Vuex: Mutations

Page 42: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Mutations

SHOW_SNACKBAR(state, message) { state.ui.snackbar.message = message state.ui.snackbar.visible = true }

Page 43: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 44: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Mutations

• Gelegentlich Abstürze (z.B. zu viele Mutations)

Page 45: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 46: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Actions

• Verändern selbst nicht den Store, sondern benutzen dazu Mutations

• Können asynchrone Abläufe (Seiteneffekte) abhandeln

• Aufruf: store.dispatch(Action.TRY_LOGIN, credentials)

Page 47: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Actions

SHOW_NOTIFICATION: ({ commit }, message) => { commit(Mutation.SHOW_SNACKBAR, message) setTimeout(() => { commit(Mutation.HIDE_SNACKBAR) }, 2500) }

Page 48: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Actions

FETCH_ARTICLE: async ({ commit, state }, articleId) => { commit(Mutation.INIT_ARTICLE, articleId) const { data } = await axios.get(`/api/article/${articleId}`) commit(Mutation.UPDATE_ARTICLE, data) return data }

Page 49: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Actions

FETCH_ARTICLE: async ({ commit, state }, articleId) => { commit(Mutation.INIT_ARTICLE, articleId) const { data } = await axios.get(`/api/article/${articleId}`) commit(Mutation.UPDATE_ARTICLE, data) return data }

Gibt Promise zurück!

Page 50: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 51: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Getter basket: state => state.basket

basketItem: state => articleId => { return state.basket.filter(item => item.articleId === articleId) }

Page 52: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue.js Komponente

Single Page Application

Comp. Props

Actions Mutations

Store

Getter

Page 53: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuex: Computed Properties

Page 54: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 4: NUXT

(Next.js für Vue.js)

Page 55: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Einführung

• „Vue Meta Framework“

• Nutzt Vue.js 2 als Basis

Page 56: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Einführung

• Hauptfeatures: Server side rendering & Prerendering

• Vereinfachung durch „Convention over configuration“

• Projektstruktur

• Routing

• Webpack-Konfiguration

• ….

Page 57: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Routing

Page 58: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Routing

Automatisches Routing

Page 59: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Routing

Page 60: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

async fetch({ store, params }) { await store.dispatch(Action.FETCH_CATEGORY, params.categoryId) const articleIds = store.getters.articleIdsForCategory(params.categoryId, params.pageId) await store.dispatch(Action.FETCH_ARTICLES, articleIds) },

Nuxt.js: Routing

Page 61: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

Page 62: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

SPA SPA mit SSR Prerendered SPA

Alles auch mit reinem Vue.js möglich!Aber: Erheblicher Konfigurationsaufwand

Page 63: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

SPA Klassische Single Page Application

Page 64: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

CDNClient

/search?q=brumergon

SPA

Grundgerüst der Anwendung Statisches HTML + JavaScript

Page 65: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SPA

APIClient

API Call

Suchergebnisse JSON

Page 66: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SPA

APIClient

API Call

Suchergebnisse JSON

Page 67: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 68: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

„SPA the PHP-way“SPA mit SSR

Page 69: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SSR

Client

/search?q=brumergon

(Node-)Server

Page 70: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SSR

Client

/search?q=brumergon

(Node-)Server

Statisches HTML (inkl. Suchergebnisse)

Page 71: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Server Side Rendering

async fetch({ store, params }) { await store.dispatch(Action.FETCH_CATEGORY, params.categoryId) const articleIds = store.getters.articleIdsForCategory(params.categoryId, params.pageId) await store.dispatch(Action.FETCH_ARTICLES, articleIds) },

Page Component

Wird auf dem Server ausgeführt

Page 72: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SSR

• Schnellere Ladezeiten (Mobile!)

• Bessere SEO möglich

Page 73: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Ladezeiten

Mit SSROhne SSR

Page 74: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes SSR

• Node.js auf dem Server nötig, es werden nicht nur statische File/Bundles ausgeliefert

• Höhere Last auf dem Server => eventuell Caching sinnvoll

Page 75: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes

„Server Side Rendering Light“Prerendered SPA

Page 76: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes Pre

• Erzeugung von statischem HTML für jede Route (mit nuxt generate)

• Keine Dynamik auf dem Server nötig

• Bessere Wahl für Anwendungen mit hauptsächlich statischem Inhalt (z.B. Blogs)

• Vue.js: prerender-spa-plugin

Page 77: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 78: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt.js: Production Modes Pre

nuxt.config.js

Page 79: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 5: Vue-rx(Reactive Extensions für Vue.js)

Page 80: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• RxJS für Vue.js

• Reactive Extensions Integration (evtl. aus Angular bekannt)

• Observables aktuell Stage 1 ECMAScript-Proposal

Vue-rx: Einführung

Page 81: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue-rx: Anwendungsgebiete

• Zur Modellierung komplexer asynchroner Abläufe

• DOM-Events

• Websocket-Kommunikation

• Verarbeitung von stetig auftretenden Events

Page 82: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue-rx: Einführung

Page 83: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue-rx: Einführung

Produzent

Observer

Konsument

Operator

.debounce

OperatorObservable

Page 84: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vue-rx: Code-Beispiel

Page 85: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 86: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Nuxt Plugin

Vue-rx: Konfiguration

Page 87: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Steile Lernkurve (>130 Operators)

• Kann bei falscher Anwendung zu unnötig hoher Komplexität führen

• Schwer zu debuggen

Vue-rx: Nebenwirkungen

Page 88: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 6: Vuetify

Page 89: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Anwendungsgebiete

• Großer Bedarf an hochqualitativen, vordefinierten Komponenten (Vuetify bietet im Vue.js Umfeld die größte Auswahl)

• Mobile / Touch-Unterstützung als Anforderung

Page 90: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Formularelemente

Page 91: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Tabellen

Page 92: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Cards

Page 93: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Sonstiges

Page 94: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Dialoge

Page 95: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vuetify: Nebenwirkungen

• Komponenten sind zwar anpassbar, Anwendung sieht aber trotzdem immer ein wenig nach Android aus

• Falls der Kunde ein spezielles Corporate Design wünscht eventuell nicht die richtige Wahl

Page 96: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 7:

Page 97: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Anwendungsgebiete

• Alle Basiskomponenten vorhanden

• Einheitliches Look & Feel in Kombination mit eigenen, Bulma-basierten Komponenten

• Design leicht und umfassend anpassbar

Page 98: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Formulare

Page 99: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Tabellen

Page 100: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Tabellen

Page 101: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Tabellen

Page 102: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Buefy: Nebenwirkungen

• Weniger Auswahl an Komponenten

• Kleineres Entwicklungsteam

Page 103: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Steroid 8: Jest

Page 104: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Test-Runner und -Framework

• Snapshot Tests

• Mocking

• Coverage

• Assertions

• mocha + chai + X

Jest: Einführung

Page 105: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Jest: Installation

Page 106: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Jest: Konfiguration

• „Zero configuration testing platform“

• Falls doch nötig: package.json

Page 107: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 108: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Jest: *.spec.js

Page 109: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 110: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Jest: Nebenwirkungen

• Läuft out-of-the-box nicht im Browser

• Falls doch nötig: jest-puppeteer (Headless Chrome Node API)

Page 111: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

• Setup mit Vue CLI

• Server side rendering mit Nuxt.js

• State management mit Vuex

• Fancy op-piping mit Vue-rx

• UI-Komponenten aus Vuetify und Buefy

• Testing mit Jest

Vue.js on Steroids: Zusammenfassung

Page 112: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:
Page 113: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Endspurt: Zeit für Fragen

Page 114: ue.js on Steroids - eXXcellent solutions...Steroid 2: Vue.js Devtools Steroid 3: Vuex (Redux für Vue.js) Zustand Anwendungslogik UI Vuex: Einordnung Zustand Anwendungslogik UI Vuex:

Vielen Dank für Ihre Aufmerksamkeit!