SlideShare une entreprise Scribd logo
1  sur  74
QUICK START
WEB
APPLICATION
DEVELOPMENT
WITH VUE3
ASSUMING HTML &
JAVASCRIPT SKILLS
Lucas Jellema
2
OVERVIEW
RAPID INTRODUCTION OF VUE 3
You will hear about web application development with Vue 3, see it in action and try it out yourself
You will not learn how it works – only to make it work for you. In a few hours from now, you will be able to develop
a rich, reactive, good looking and modern web application. You will learn how to develop and build and how to
publish (on GitHub Pages).
You need to know at least a little bit about HTML and JavaScript in order to be successful. It would not hurt to
have seen CSS and know your way around in the browser DevTools. A background in ASP.NET WebPages
(Razor), Flask, JavaServer Pages/JavaServer Faces, Low Code programming is a good startingpoint
If you know Vue 2 – you are overqualified for this session. With Angular, React or Svelte under your belt, you will
probably see similarities and differences. These will not be discussed.
3
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
4
HOW THE WEB WAS WON…
5
HTML
images
THE STONE AGE OF WEB BROWSERS
• Browsers in mid ’90s:
• http requests for resources such as HTML files and images
• interpret HTML and present UI
• CSS (cascading style sheets) to apply style to structure
• support forms and button to submit form
• a tiny little bit of JavaScript (1995: Scheme, Mocha/Livescript, ..., ECMA Script – 1997, ES)
6
EARLIEST WEB APPLICATIONS
• Server side code handles HTTP Request
• serves static resources such as images and fixed HTML
• serves HTML pages – dynamically constructed
• Typical server side implementations
• PHP
• Java Servlets
followed by JavaServer Pages (JSPs)
and Apache Struts, Model View Controller (MVC)
• Perl
• Also: Java Applets, ActiveX, Flash (Shockwave player)
• mimic desktop experience from within the browser
• Browser [version] differences
7
Server
http request/response
BROWSER AND WEB EVOLUTION
• AJAX (Server Sent Requests, WebSockets, Web Workers)
• DHTML (Dynamic HTML – runtime client side HTML manipulation from JavaScript); jQuery
• Single Page [Web] Application (SPA)
• Reactive (event triggered processing)
• HTML5
• end of Java Applets and other plugins
• Mobile, progressive web app
• Desktop apps that are really web applications with prepackaged browser (Teams, VS Code, ..)
• frontend frameworks: AngularJS, Angular, React, Vue, Svelte, Aurelia, …
• Flutter, .NET Multi-platform App UI (MAUI)
• TypeScript – "JavaScript that scales "
8
[MY] WEB DEVELOPMENT FROM THE ’90S UNTIL TODAY
9
HTML 2,
JavaScript, CSS
Java Servlets
JSP (Java Server
Pages)
JavaServer Faces
(JSF)
Rich (AJAX powered) JSF
now
1999
2007
2009
Vue 3 + Vite
+ GitHub Pages
AJAX
HTML5
Reactive
AngularJS
MVVM
MVC
React
Vue
SPA
.. several failed
attempts at
mastering React …
Server side
HTML rendering
Client side
HTML rendering
Mix of client and server
side rendering
Svelte
Angular
Aurelia
TypeScript
DHTML
& jQuery
REACTIVE WEB DEVELOPMENT FRAMEWORKS
• Responsive, attractive, rich
• Structured, declarative/low code, simple to develop
• Scalable – complexity, team size
• Reuse of components
• Cross platform
• Software engineering and automation
• Tools for speeding up development | build | test | debug | monitor
• Community
• Pace of evolution
10
WHY VUE?
• I like it
• It is popular (and growing in popularity)
• It seems rich enough for many types of applications
• Vue can be a stepping stone:
Once you master Vue, adopting React and Angular will not be a huge step
• (Vue compared to React:) “Finding developers with Vue expertise is harder,
but teaching JavaScript developers how to use Vue is easier.”
11
COMPONENTS
• Vue applications are built from components
• A component is a building block that
• can render itself (HTML)
• performs logic (JavaScript)
• applies its own styles (CSS)
• holds its own state (local data)
• accepts properties to configure its behavior and appearance
• emits events to inform its parent component about actions
12
VUE COMPONENT
13
VUE COMPONENTS
14
VUE COMPONENTS
15
REUSE COMPONENTS
16
A VUE COMPONENT’S TEMPLATE CAN CONTAIN
• Standard HTML tags
• Custom Components
• such as MyComponent
• components from 3rd party libraries
• Vue attributes on standard tags
• v-if, v-else, v-for, ..
• JavaScript Expressions
• for attribute values – through :
• for event handling – through @
• for content rendering
moustache expression {{}}
17
A VUE COMPONENT’S TEMPLATE CAN CONTAIN
18
JAVASCRIPT EXPRESSIONS
• use locally defined functions and variables
• inside the component itself
• use any valid JavaScript function
• use a restricted list of globals
• including Regexp, Math, String and Date
19
Source code
BETWEEN DEVELOPMENT AND RUN IS TRANSPILATION
20
Source Code
Executable
Code
HTML,
JavaScript, CSS
.vue, TypeScript,
<anything>
CHILD COMPONENTS
• When you use a component, you can pass
• values for exposed properties
• content for predefined slots
• Capture and handle events emitted by the component
21
Component
properties
slots
slot X
slot Y
events
CHILD COMPONENT INTERACTIONS
22
SomeComponent
properties
MainComponent
<SomeComponent >
</SomeComponent>
<template>
</template>
<script setup>
import SomeComponent
from './SomeComponent.vue'
</script>
CHILD COMPONENTS - PROPERTIES
• When a component uses a child component it can pass values for properties to the child
• The properties are available as local read-only variables in the context of the child component
23
SomeComponent
properties
<p>{{nameOfProperty}}</p>
<input :value="nameOfProperty”>
</input>
MainComponent
<SomeComponent
nameOfProperty="value">
</SomeComponent>
CHILD COMPONENTS – SLOTS
FOR PASSING CONTENT FRAGMENTS TO CHILD
• When a component uses a child component it can pass fragments of (HTML) content to the child into
predefined slots
• These fragments are processed in the corresponding slot elements in the child’s template
24
SomeComponent
properties
<p>{{nameOfProperty}}</p>
<input :value="nameOfProperty”>
</input>
MainComponent
<SomeComponent
nameOfProperty="value">
</SomeComponent>
<slot> <slot />
<slot name="footer"> <slot />
slots
<template v-slot:footer>
<h3>Special Message </h3>
</template>
<div id="box">
<h1 class="teaser">Announcement</h1>
</div>
CHILD COMPONENTS – EMITTING EVENTS
• A [child] component can emit events – to inform a parent about something of interest
• Events can be captured and handled by the parent in JavaScript handlers
25
SomeComponent
properties
<p>{{nameOfProperty}}</p>
<input :value="nameOfProperty”>
</input>
MainComponent
<SomeComponent
nameOfProperty="value“
>
</SomeComponent>
<button @click="$emit('clicked')">
Please – click me!
</button>
<slot name="footer"> <slot />
slots
<template v-slot:footer>
<h3>Special Message </h3>
</template>
events
@clicked="(event) => {
console.log('CHILD CLICKED’)}"
METHODS
• Locally defined JavaScript functions can be invoked from expressions and as event handlers
27
SomeComponent
properties
<p>{{nameOfProperty}}</p>
<input :value="nameOfProperty”>
</input>
MainComponent
<template>
<SomeComponent
nameOfProperty="value"
@clicked=“clickHandler()" >
<SomeComponent />
</template> <button @click="$emit('clicked')">
Please – click me!
</button>
<slot name="footer"> <slot />
slots
<script setup>
function clickHandler() {
console.log('CHILD CLICKED')
}
</script>
events
STYLE
• Components can contain a <style> fragment – in addition to <template> and <script>
• Local CSS style definitions – intended only for the component itself – are defined here
28
MainComponent
<template>
<h1 class="yellow-page">Yellow Pages</h1>
<SomeComponent
nameOfProperty="value" >
<SomeComponent />
</template>
<script setup>
import SomeComponent from './SomeComponent.vue'
</script>
<style>
h1 {font-family: 'Courier New', Courier, monospace;}
.yellow-page {background-color: yellow;}
</style>
HANDSON - YOU GO PLAY!
• github.com/lucasjellema/code-face-vue3-intro-reactiive-webapps-aug2023
29
DINNER
30
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
• Next steps …
31
REACTIVE
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
32
reactive
data
element
REACTIVE
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
33
reactive
data
element
The value: 42
Repeat: 42
42
REACTIVE – CHANGE TRIGGERS ACTION
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
34
reactive
data
element
The value: 42
Repeat: 42
42
13
Repeat: 13
The value: 13
REACTIVE
35
reactive
data
element
The value: 42
Repeat: is really is 42
42
PROGRAMMATIC MANIPULATION OF REACTIVE DATA
36
reactive
data
element
The value: 42
Repeat: is really is 42
42 Double
update the data
element to twice its
current value
function
PROGRAMMATIC MANIPULATION OF REACTIVE DATA
37
reactive
data
element
The value: 42
Repeat: is really is 42
42 Double
update the data
element to twice its
current value
function
VUE IN THE PLAYGROUND
38
DEMO REACTIVE TOGGLE
39
WATCH:
PROGRAMMATIC OBSERVATION OF REACTIVE DATA
40
reactive
data
element
The value: 42
Repeat: is really is 42
42
• Programmatic reaction to value change
• Configure a listener for a reactive data element
• to be invoked whenever the data changes
watcher
subscribe
WATCH
41
reactive
data
element
The value: 42
Repeat: is really is 42
42
watcher
subscribe
Double
update the data
element to twice its
current value
DECLARATIVE WATCHER: COMPUTED
42
reactive
data
element
The double value: 84
Repeat: is really is 42
42
watcher
subscribe
Double
update the data
element to twice its
current value
computed
property
doubeValue
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
• Next steps …
43
VUE SOFTWARE DELIVERY PROCESS
44
Develop
Sources
(.vue, .html, npm
packages, …)
Format, QA,
Test,
Transpile,
Bundle
Deploy/Publish
& Run
code completion
formatting
syntax check | “compilation”
Hot Reload
VUE – SPECIAL DEVELOPMENT ENVIRONMENTS
• StackBlitz
• browser based – leveraging WebAssembly & WebContainer
• Node, npm, Vite all run inside your browser
• Gitpod.io
• cloud based, browser accessed
• Node, npm, Vite all run in an ephemeral cloud based Linux machine
– accessed through a browser
46
STACKBLITZ
47
GITPOD
48
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
• Next steps …
49
STATE (MODEL) – CROSS COMPONENT DATA
• Components manage their own [internal] state
• parent inject properties into children
• children emit events for capture by parents
• Some state is
• retrieved from a backend service (database , API, file, ..)
• shared across multiple components
• Vue applications use “state stores” as containers for such state
• and decouple state management from UI components
50
state
stores
SHARED STATE MANAGED IN STATE STORE
ACROSS COMPONENTS
51
Component A
Component B
Component C
state
state store
getters
actions
SHARED STATE MANAGED IN STATE STORES
52
Component A
Component B
Component C
state
state
state stores
getters
actions
getters
actions
SHARED STATE MANAGED IN STATE STORES
53
Component A
Component B
Component C
state
state
state stores
getters
actions
getters
actions
Database
file
file
REST API
REST API
Server
Client
USING PINIA
• Instantiate Vue application with Pinia enabled or: npm install pinia --save
• Initialize Pinia and inject into Vue App
• Define Store – id, state, getters (computed), actions
• Use Store in Components
54
main.js App.vue HelloWorld.vue greetingState.js
USING PINIA
55
main.js App.vue HelloWorld.vue greetingState.js
USING PINIA STATE STORE ACROSS COMPONENTS
56
main.js App.vue HelloWorld.vue greetingState.js
MessageComposer.vue
USING PINIA STATE STORE ACROSS COMPONENTS
57
main.js App.vue HelloWorld.vue greetingState.js
MessageComposer.vue
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
• Next steps …
58
ADVANCED USER INTERFACE FOR COMPLEX DATA
• Assume we have a complex data set that we want to present to the user
• can we use predefined UI components to quickly create a functionally rich and visually pleasing front end?
59
VUE COMPONENT LIBRARYS
• explore
• install
• use
6
PRIMEVUE COMPONENT LIBRARY
• explore
• install
• use
USE PRIMEVUE COMPONENT LIBRARY
• Dozens of components
• simple to quite complex
• Free to use
• Add to your application:
• npm install primevue --save
• Import PrimeVue component into
your component or view (or application wide)
• import PrimeVue from 'primevue/config';
• import DataTable from 'primevue/datatable’;
• Initialize use of PrimeVue in app.vue
• app.use(PrimeVue);
• Use PrimeVue component tag in your template
<DataTable :value="peopleStore.people" tableStyle="min-width: 50rem">
<Column field="first_name" header="First Name"> </Column>
62
EXAMPLE OF USING PRIMEVUE DATATABLE
63
PRIMEVUE DATATABLE FEATURES
• Structured, formatted presentation of data
• Sort
• Filter – global and per column
• Pagination
• Draggable Columns
• Expandable Rows
• Row selection
• Scrolling (frozen rows, frozen columns)
• Conditional styling
• Export (to CSV)
• Context Menu
• Keyboard support
64
AGENDA
• Introduction, background, history
• First steps with Vue – intro, demo & hands-on
• Components
• Expressions
• Properties, Slots, Events, Methods
• Dinner
• Closer to real world applications - – intro, demo & hands-on
• Reactive
• Software Engineering & Build
• State
• Component Libraries
• Publish Vue Web application on GitHub Pages
• Next steps …
65
PUBLISH AND SHARE YOUR WEB APP
66
PUBLISH VUE APPLICATION ON GITHUB PAGES
• Make your Vue application available on a public URL: everyone can access it
• One easy and free way: GitHub Pages
• expose static website from a GitHub Repository
67
STEPS WITH GITHUB PAGES
Preparation
• npm install gh-pages - -save-dev
• edit package.json: add scripts and homepage
• edit file vite.config.ts: add property base
For every release
• npm run deploy
68
QUICK SESSION OVERVIEW
• Components
• template, script, style
• {{ }} expressions and <tag :attribute @handler v-if: > annotated/wired attributes and handlers
• nested components – properties, slots, events
• Reactive
• declarative, two-way data binding
• Software Engineering
• IDE & development environment, code formatting, build, test, QA
• State Stores
• management of cross component session data
• Component Libraries
• productive, feature rich, high quality application development using 3rd party components
• Publish Vue application to the world
69
NEXT STEPS
• Play, Explore, Try Out
• Obvious first next topics
• Routing – navigation, multi-page
• Internationalization (i18n)
• Styling
• Add backend: interaction with Database, APIs
• Security
• Explore Component Libraries beyond PrimeVue
• Work on a private or shared Vue project – something to provide some scope, focus and purpose
• Have fun!
• Have a go at some of the additional labs for this session …
70
HANDSON - YOU GO PLAY!
• github.com/lucasjellema/code-face-vue3-intro-reactiive-webapps-aug2023
71
www.conclusion.nl
REACTIVE
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
73
reactive
data
element
{{msg}}
Hello World!
REACTIVE
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
74
reactive
data
element
{{msg}}
Hello World!
computed
reactive data
element
{{MSG}}
REACTIVE
• Declarative two-way
binding from UI
Components to data
element
• All UI components that
depend on a data
element are refreshed
whenever the value
changes
• without explicit action
by the developer or
additional supporting
code
75
reactive
data
element
{{msg}}
Hello World!
computed
reactive data
element
{{MSG}}
watch
watch
function
{{somethingCompletelyDifferent}}
INTERNATIONALIZATION (I18N)
• no boilerplate text in the code – all extracted into external files
• multiple languages/locales
• switching between locales
76

Contenu connexe

Tendances

Tendances (20)

Why Vue.js?
Why Vue.js?Why Vue.js?
Why Vue.js?
 
Vue.js for beginners
Vue.js for beginnersVue.js for beginners
Vue.js for beginners
 
Intro to vue.js
Intro to vue.jsIntro to vue.js
Intro to vue.js
 
RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular Components
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Deep dive into Vue.js
Deep dive into Vue.jsDeep dive into Vue.js
Deep dive into Vue.js
 
Docker swarm
Docker swarmDocker swarm
Docker swarm
 
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with ThymeleafSpring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
 
Angular components
Angular componentsAngular components
Angular components
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
 
Projects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 ProjectsProjects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 Projects
 
Reactjs
Reactjs Reactjs
Reactjs
 
Vue.js Getting Started
Vue.js Getting StartedVue.js Getting Started
Vue.js Getting Started
 
Angular 10 course_content
Angular 10 course_contentAngular 10 course_content
Angular 10 course_content
 
Angular material
Angular materialAngular material
Angular material
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 

Similaire à Introduction to web application development with Vue (for absolute beginners) (Conclusion Code Café - August 2023)

Mobile and IBM Worklight Best Practices
Mobile and IBM Worklight Best PracticesMobile and IBM Worklight Best Practices
Mobile and IBM Worklight Best Practices
Andrew Ferrier
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
Ganesh Kondal
 

Similaire à Introduction to web application development with Vue (for absolute beginners) (Conclusion Code Café - August 2023) (20)

Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
Oracle JavaScript Extension Toolkit Web Components Bring Agility to App Devel...
 
Vue 2.0 + Vuex Router & Vuex at Vue.js
Vue 2.0 + Vuex Router & Vuex at Vue.jsVue 2.0 + Vuex Router & Vuex at Vue.js
Vue 2.0 + Vuex Router & Vuex at Vue.js
 
The future of web development write once, run everywhere with angular js an...
The future of web development   write once, run everywhere with angular js an...The future of web development   write once, run everywhere with angular js an...
The future of web development write once, run everywhere with angular js an...
 
The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...The future of web development write once, run everywhere with angular.js and ...
The future of web development write once, run everywhere with angular.js and ...
 
Santosh_Resume_Java
Santosh_Resume_JavaSantosh_Resume_Java
Santosh_Resume_Java
 
Mobile and IBM Worklight Best Practices
Mobile and IBM Worklight Best PracticesMobile and IBM Worklight Best Practices
Mobile and IBM Worklight Best Practices
 
Webcomponents are your frameworks best friend
Webcomponents are your frameworks best friendWebcomponents are your frameworks best friend
Webcomponents are your frameworks best friend
 
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
Office 365 Saturday (Sydney) - SharePoint framework – build integrated user e...
 
ReactJS vs AngularJS - Head to Head comparison
ReactJS vs AngularJS - Head to Head comparisonReactJS vs AngularJS - Head to Head comparison
ReactJS vs AngularJS - Head to Head comparison
 
MVC 6 - the new unified Web programming model
MVC 6 - the new unified Web programming modelMVC 6 - the new unified Web programming model
MVC 6 - the new unified Web programming model
 
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachJDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
 
SharePoint Framework - Developer Preview
SharePoint Framework - Developer PreviewSharePoint Framework - Developer Preview
SharePoint Framework - Developer Preview
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014
 
Progressive Web Apps and React
Progressive Web Apps and ReactProgressive Web Apps and React
Progressive Web Apps and React
 
Backbonification for dummies - Arrrrug 10/1/2012
Backbonification for dummies - Arrrrug 10/1/2012Backbonification for dummies - Arrrrug 10/1/2012
Backbonification for dummies - Arrrrug 10/1/2012
 
Creating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJSCreating Modular Test-Driven SPAs with Spring and AngularJS
Creating Modular Test-Driven SPAs with Spring and AngularJS
 
Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
 
Building intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQueryBuilding intranet applications with ASP.NET AJAX and jQuery
Building intranet applications with ASP.NET AJAX and jQuery
 
JavaScript Modules Done Right
JavaScript Modules Done RightJavaScript Modules Done Right
JavaScript Modules Done Right
 

Plus de Lucas Jellema

Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Lucas Jellema
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Lucas Jellema
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
Lucas Jellema
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
Lucas Jellema
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Lucas Jellema
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Lucas Jellema
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Lucas Jellema
 

Plus de Lucas Jellema (20)

Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
Making the Shift Left - Bringing Ops to Dev before bringing applications to p...
 
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
Lightweight coding in powerful Cloud Development Environments (DigitalXchange...
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...Apache Superset - open source data exploration and visualization (Conclusion ...
Apache Superset - open source data exploration and visualization (Conclusion ...
 
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
CONNECTING THE REAL WORLD TO ENTERPRISE IT – HOW IoT DRIVES OUR ENERGY TRANSI...
 
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...Help me move away from Oracle - or not?!  (Oracle Community Tour EMEA - LVOUG...
Help me move away from Oracle - or not?! (Oracle Community Tour EMEA - LVOUG...
 
Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!Op je vingers tellen... tot 1000!
Op je vingers tellen... tot 1000!
 
IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)IoT - from prototype to enterprise platform (DigitalXchange 2022)
IoT - from prototype to enterprise platform (DigitalXchange 2022)
 
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
Who Wants to Become an IT Architect-A Look at the Bigger Picture - DigitalXch...
 
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
Steampipe - use SQL to retrieve data from cloud, platforms and files (Code Ca...
 
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
Automation of Software Engineering with OCI DevOps Build and Deployment Pipel...
 
Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...Introducing Dapr.io - the open source personal assistant to microservices and...
Introducing Dapr.io - the open source personal assistant to microservices and...
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
 
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
Microservices, Apache Kafka, Node, Dapr and more - Part Two (Fontys Hogeschoo...
 
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
Microservices, Node, Dapr and more - Part One (Fontys Hogeschool, Spring 2022)
 
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
6Reinventing Oracle Systems in a Cloudy World (RMOUG Trainingdays, February 2...
 
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
Help me move away from Oracle! (RMOUG Training Days 2022, February 2022)
 
Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)Tech Talks 101 - DevOps (jan 2022)
Tech Talks 101 - DevOps (jan 2022)
 
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
Conclusion Code Cafe - Microcks for Mocking and Testing Async APIs (January 2...
 
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...Cloud Native Application Development - build fast, low TCO, scalable & agile ...
Cloud Native Application Development - build fast, low TCO, scalable & agile ...
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
 

Dernier

Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
drm1699
 

Dernier (20)

Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with Links
 
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
Abortion Pill Prices Mthatha (@](+27832195400*)[ 🏥 Women's Abortion Clinic In...
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
 
Your Ultimate Web Studio for Streaming Anywhere | Evmux
Your Ultimate Web Studio for Streaming Anywhere | EvmuxYour Ultimate Web Studio for Streaming Anywhere | Evmux
Your Ultimate Web Studio for Streaming Anywhere | Evmux
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-CloudAlluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
Alluxio Monthly Webinar | Simplify Data Access for AI in Multi-Cloud
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST API
 
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
 
微信号购买
微信号购买微信号购买
微信号购买
 
Test Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdfTest Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdf
 
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
Navigation in flutter – how to add stack, tab, and drawer navigators to your ...
 
Lessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfLessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdf
 
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
 
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdf
 
BusinessGPT - Security and Governance for Generative AI
BusinessGPT  - Security and Governance for Generative AIBusinessGPT  - Security and Governance for Generative AI
BusinessGPT - Security and Governance for Generative AI
 
[GRCPP] Introduction to concepts (C++20)
[GRCPP] Introduction to concepts (C++20)[GRCPP] Introduction to concepts (C++20)
[GRCPP] Introduction to concepts (C++20)
 

Introduction to web application development with Vue (for absolute beginners) (Conclusion Code Café - August 2023)

  • 1.
  • 2. QUICK START WEB APPLICATION DEVELOPMENT WITH VUE3 ASSUMING HTML & JAVASCRIPT SKILLS Lucas Jellema 2
  • 3. OVERVIEW RAPID INTRODUCTION OF VUE 3 You will hear about web application development with Vue 3, see it in action and try it out yourself You will not learn how it works – only to make it work for you. In a few hours from now, you will be able to develop a rich, reactive, good looking and modern web application. You will learn how to develop and build and how to publish (on GitHub Pages). You need to know at least a little bit about HTML and JavaScript in order to be successful. It would not hurt to have seen CSS and know your way around in the browser DevTools. A background in ASP.NET WebPages (Razor), Flask, JavaServer Pages/JavaServer Faces, Low Code programming is a good startingpoint If you know Vue 2 – you are overqualified for this session. With Angular, React or Svelte under your belt, you will probably see similarities and differences. These will not be discussed. 3
  • 4. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages 4
  • 5. HOW THE WEB WAS WON… 5 HTML images
  • 6. THE STONE AGE OF WEB BROWSERS • Browsers in mid ’90s: • http requests for resources such as HTML files and images • interpret HTML and present UI • CSS (cascading style sheets) to apply style to structure • support forms and button to submit form • a tiny little bit of JavaScript (1995: Scheme, Mocha/Livescript, ..., ECMA Script – 1997, ES) 6
  • 7. EARLIEST WEB APPLICATIONS • Server side code handles HTTP Request • serves static resources such as images and fixed HTML • serves HTML pages – dynamically constructed • Typical server side implementations • PHP • Java Servlets followed by JavaServer Pages (JSPs) and Apache Struts, Model View Controller (MVC) • Perl • Also: Java Applets, ActiveX, Flash (Shockwave player) • mimic desktop experience from within the browser • Browser [version] differences 7 Server http request/response
  • 8. BROWSER AND WEB EVOLUTION • AJAX (Server Sent Requests, WebSockets, Web Workers) • DHTML (Dynamic HTML – runtime client side HTML manipulation from JavaScript); jQuery • Single Page [Web] Application (SPA) • Reactive (event triggered processing) • HTML5 • end of Java Applets and other plugins • Mobile, progressive web app • Desktop apps that are really web applications with prepackaged browser (Teams, VS Code, ..) • frontend frameworks: AngularJS, Angular, React, Vue, Svelte, Aurelia, … • Flutter, .NET Multi-platform App UI (MAUI) • TypeScript – "JavaScript that scales " 8
  • 9. [MY] WEB DEVELOPMENT FROM THE ’90S UNTIL TODAY 9 HTML 2, JavaScript, CSS Java Servlets JSP (Java Server Pages) JavaServer Faces (JSF) Rich (AJAX powered) JSF now 1999 2007 2009 Vue 3 + Vite + GitHub Pages AJAX HTML5 Reactive AngularJS MVVM MVC React Vue SPA .. several failed attempts at mastering React … Server side HTML rendering Client side HTML rendering Mix of client and server side rendering Svelte Angular Aurelia TypeScript DHTML & jQuery
  • 10. REACTIVE WEB DEVELOPMENT FRAMEWORKS • Responsive, attractive, rich • Structured, declarative/low code, simple to develop • Scalable – complexity, team size • Reuse of components • Cross platform • Software engineering and automation • Tools for speeding up development | build | test | debug | monitor • Community • Pace of evolution 10
  • 11. WHY VUE? • I like it • It is popular (and growing in popularity) • It seems rich enough for many types of applications • Vue can be a stepping stone: Once you master Vue, adopting React and Angular will not be a huge step • (Vue compared to React:) “Finding developers with Vue expertise is harder, but teaching JavaScript developers how to use Vue is easier.” 11
  • 12. COMPONENTS • Vue applications are built from components • A component is a building block that • can render itself (HTML) • performs logic (JavaScript) • applies its own styles (CSS) • holds its own state (local data) • accepts properties to configure its behavior and appearance • emits events to inform its parent component about actions 12
  • 17. A VUE COMPONENT’S TEMPLATE CAN CONTAIN • Standard HTML tags • Custom Components • such as MyComponent • components from 3rd party libraries • Vue attributes on standard tags • v-if, v-else, v-for, .. • JavaScript Expressions • for attribute values – through : • for event handling – through @ • for content rendering moustache expression {{}} 17
  • 18. A VUE COMPONENT’S TEMPLATE CAN CONTAIN 18
  • 19. JAVASCRIPT EXPRESSIONS • use locally defined functions and variables • inside the component itself • use any valid JavaScript function • use a restricted list of globals • including Regexp, Math, String and Date 19
  • 20. Source code BETWEEN DEVELOPMENT AND RUN IS TRANSPILATION 20 Source Code Executable Code HTML, JavaScript, CSS .vue, TypeScript, <anything>
  • 21. CHILD COMPONENTS • When you use a component, you can pass • values for exposed properties • content for predefined slots • Capture and handle events emitted by the component 21 Component properties slots slot X slot Y events
  • 22. CHILD COMPONENT INTERACTIONS 22 SomeComponent properties MainComponent <SomeComponent > </SomeComponent> <template> </template> <script setup> import SomeComponent from './SomeComponent.vue' </script>
  • 23. CHILD COMPONENTS - PROPERTIES • When a component uses a child component it can pass values for properties to the child • The properties are available as local read-only variables in the context of the child component 23 SomeComponent properties <p>{{nameOfProperty}}</p> <input :value="nameOfProperty”> </input> MainComponent <SomeComponent nameOfProperty="value"> </SomeComponent>
  • 24. CHILD COMPONENTS – SLOTS FOR PASSING CONTENT FRAGMENTS TO CHILD • When a component uses a child component it can pass fragments of (HTML) content to the child into predefined slots • These fragments are processed in the corresponding slot elements in the child’s template 24 SomeComponent properties <p>{{nameOfProperty}}</p> <input :value="nameOfProperty”> </input> MainComponent <SomeComponent nameOfProperty="value"> </SomeComponent> <slot> <slot /> <slot name="footer"> <slot /> slots <template v-slot:footer> <h3>Special Message </h3> </template> <div id="box"> <h1 class="teaser">Announcement</h1> </div>
  • 25. CHILD COMPONENTS – EMITTING EVENTS • A [child] component can emit events – to inform a parent about something of interest • Events can be captured and handled by the parent in JavaScript handlers 25 SomeComponent properties <p>{{nameOfProperty}}</p> <input :value="nameOfProperty”> </input> MainComponent <SomeComponent nameOfProperty="value“ > </SomeComponent> <button @click="$emit('clicked')"> Please – click me! </button> <slot name="footer"> <slot /> slots <template v-slot:footer> <h3>Special Message </h3> </template> events @clicked="(event) => { console.log('CHILD CLICKED’)}"
  • 26. METHODS • Locally defined JavaScript functions can be invoked from expressions and as event handlers 27 SomeComponent properties <p>{{nameOfProperty}}</p> <input :value="nameOfProperty”> </input> MainComponent <template> <SomeComponent nameOfProperty="value" @clicked=“clickHandler()" > <SomeComponent /> </template> <button @click="$emit('clicked')"> Please – click me! </button> <slot name="footer"> <slot /> slots <script setup> function clickHandler() { console.log('CHILD CLICKED') } </script> events
  • 27. STYLE • Components can contain a <style> fragment – in addition to <template> and <script> • Local CSS style definitions – intended only for the component itself – are defined here 28 MainComponent <template> <h1 class="yellow-page">Yellow Pages</h1> <SomeComponent nameOfProperty="value" > <SomeComponent /> </template> <script setup> import SomeComponent from './SomeComponent.vue' </script> <style> h1 {font-family: 'Courier New', Courier, monospace;} .yellow-page {background-color: yellow;} </style>
  • 28. HANDSON - YOU GO PLAY! • github.com/lucasjellema/code-face-vue3-intro-reactiive-webapps-aug2023 29
  • 30. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages • Next steps … 31
  • 31. REACTIVE • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 32 reactive data element
  • 32. REACTIVE • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 33 reactive data element The value: 42 Repeat: 42 42
  • 33. REACTIVE – CHANGE TRIGGERS ACTION • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 34 reactive data element The value: 42 Repeat: 42 42 13 Repeat: 13 The value: 13
  • 35. PROGRAMMATIC MANIPULATION OF REACTIVE DATA 36 reactive data element The value: 42 Repeat: is really is 42 42 Double update the data element to twice its current value function
  • 36. PROGRAMMATIC MANIPULATION OF REACTIVE DATA 37 reactive data element The value: 42 Repeat: is really is 42 42 Double update the data element to twice its current value function
  • 37. VUE IN THE PLAYGROUND 38
  • 39. WATCH: PROGRAMMATIC OBSERVATION OF REACTIVE DATA 40 reactive data element The value: 42 Repeat: is really is 42 42 • Programmatic reaction to value change • Configure a listener for a reactive data element • to be invoked whenever the data changes watcher subscribe
  • 40. WATCH 41 reactive data element The value: 42 Repeat: is really is 42 42 watcher subscribe Double update the data element to twice its current value
  • 41. DECLARATIVE WATCHER: COMPUTED 42 reactive data element The double value: 84 Repeat: is really is 42 42 watcher subscribe Double update the data element to twice its current value computed property doubeValue
  • 42. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages • Next steps … 43
  • 43. VUE SOFTWARE DELIVERY PROCESS 44 Develop Sources (.vue, .html, npm packages, …) Format, QA, Test, Transpile, Bundle Deploy/Publish & Run code completion formatting syntax check | “compilation” Hot Reload
  • 44. VUE – SPECIAL DEVELOPMENT ENVIRONMENTS • StackBlitz • browser based – leveraging WebAssembly & WebContainer • Node, npm, Vite all run inside your browser • Gitpod.io • cloud based, browser accessed • Node, npm, Vite all run in an ephemeral cloud based Linux machine – accessed through a browser 46
  • 47. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages • Next steps … 49
  • 48. STATE (MODEL) – CROSS COMPONENT DATA • Components manage their own [internal] state • parent inject properties into children • children emit events for capture by parents • Some state is • retrieved from a backend service (database , API, file, ..) • shared across multiple components • Vue applications use “state stores” as containers for such state • and decouple state management from UI components 50 state stores
  • 49. SHARED STATE MANAGED IN STATE STORE ACROSS COMPONENTS 51 Component A Component B Component C state state store getters actions
  • 50. SHARED STATE MANAGED IN STATE STORES 52 Component A Component B Component C state state state stores getters actions getters actions
  • 51. SHARED STATE MANAGED IN STATE STORES 53 Component A Component B Component C state state state stores getters actions getters actions Database file file REST API REST API Server Client
  • 52. USING PINIA • Instantiate Vue application with Pinia enabled or: npm install pinia --save • Initialize Pinia and inject into Vue App • Define Store – id, state, getters (computed), actions • Use Store in Components 54 main.js App.vue HelloWorld.vue greetingState.js
  • 53. USING PINIA 55 main.js App.vue HelloWorld.vue greetingState.js
  • 54. USING PINIA STATE STORE ACROSS COMPONENTS 56 main.js App.vue HelloWorld.vue greetingState.js MessageComposer.vue
  • 55. USING PINIA STATE STORE ACROSS COMPONENTS 57 main.js App.vue HelloWorld.vue greetingState.js MessageComposer.vue
  • 56. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages • Next steps … 58
  • 57. ADVANCED USER INTERFACE FOR COMPLEX DATA • Assume we have a complex data set that we want to present to the user • can we use predefined UI components to quickly create a functionally rich and visually pleasing front end? 59
  • 58. VUE COMPONENT LIBRARYS • explore • install • use 6
  • 59. PRIMEVUE COMPONENT LIBRARY • explore • install • use
  • 60. USE PRIMEVUE COMPONENT LIBRARY • Dozens of components • simple to quite complex • Free to use • Add to your application: • npm install primevue --save • Import PrimeVue component into your component or view (or application wide) • import PrimeVue from 'primevue/config'; • import DataTable from 'primevue/datatable’; • Initialize use of PrimeVue in app.vue • app.use(PrimeVue); • Use PrimeVue component tag in your template <DataTable :value="peopleStore.people" tableStyle="min-width: 50rem"> <Column field="first_name" header="First Name"> </Column> 62
  • 61. EXAMPLE OF USING PRIMEVUE DATATABLE 63
  • 62. PRIMEVUE DATATABLE FEATURES • Structured, formatted presentation of data • Sort • Filter – global and per column • Pagination • Draggable Columns • Expandable Rows • Row selection • Scrolling (frozen rows, frozen columns) • Conditional styling • Export (to CSV) • Context Menu • Keyboard support 64
  • 63. AGENDA • Introduction, background, history • First steps with Vue – intro, demo & hands-on • Components • Expressions • Properties, Slots, Events, Methods • Dinner • Closer to real world applications - – intro, demo & hands-on • Reactive • Software Engineering & Build • State • Component Libraries • Publish Vue Web application on GitHub Pages • Next steps … 65
  • 64. PUBLISH AND SHARE YOUR WEB APP 66
  • 65. PUBLISH VUE APPLICATION ON GITHUB PAGES • Make your Vue application available on a public URL: everyone can access it • One easy and free way: GitHub Pages • expose static website from a GitHub Repository 67
  • 66. STEPS WITH GITHUB PAGES Preparation • npm install gh-pages - -save-dev • edit package.json: add scripts and homepage • edit file vite.config.ts: add property base For every release • npm run deploy 68
  • 67. QUICK SESSION OVERVIEW • Components • template, script, style • {{ }} expressions and <tag :attribute @handler v-if: > annotated/wired attributes and handlers • nested components – properties, slots, events • Reactive • declarative, two-way data binding • Software Engineering • IDE & development environment, code formatting, build, test, QA • State Stores • management of cross component session data • Component Libraries • productive, feature rich, high quality application development using 3rd party components • Publish Vue application to the world 69
  • 68. NEXT STEPS • Play, Explore, Try Out • Obvious first next topics • Routing – navigation, multi-page • Internationalization (i18n) • Styling • Add backend: interaction with Database, APIs • Security • Explore Component Libraries beyond PrimeVue • Work on a private or shared Vue project – something to provide some scope, focus and purpose • Have fun! • Have a go at some of the additional labs for this session … 70
  • 69. HANDSON - YOU GO PLAY! • github.com/lucasjellema/code-face-vue3-intro-reactiive-webapps-aug2023 71
  • 71. REACTIVE • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 73 reactive data element {{msg}} Hello World!
  • 72. REACTIVE • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 74 reactive data element {{msg}} Hello World! computed reactive data element {{MSG}}
  • 73. REACTIVE • Declarative two-way binding from UI Components to data element • All UI components that depend on a data element are refreshed whenever the value changes • without explicit action by the developer or additional supporting code 75 reactive data element {{msg}} Hello World! computed reactive data element {{MSG}} watch watch function {{somethingCompletelyDifferent}}
  • 74. INTERNATIONALIZATION (I18N) • no boilerplate text in the code – all extracted into external files • multiple languages/locales • switching between locales 76

Notes de l'éditeur

  1. https://auth0.com/blog/a-brief-history-of-javascript/
  2. https://auth0.com/blog/a-brief-history-of-javascript/
  3. https://auth0.com/blog/a-brief-history-of-javascript/
  4. https://play.vuejs.org/#eNp9U01v00AQ/SujvbgVIVYbDihyI6CtBEh8CHJjOTj2JN52vWvtrpOgyP+dtzZOLQS9zc68N37zZnwSb5tmvm9ZLIU0WeC60XnglTREWXW1WldMQGhV5EFZk6XI9bVS7fsgwharOw650p6sodPJ8IHu0OTisutAWIy4T79ubd1YwyZQeiZf0/6l2t5I4St7WKugWYrVrTWlih/MNfU59LkeKa3+EyHWCvStdeAriCdl6EeSJ7Nkk8woKZKfaDaCI2AJfX1AXXdukmo19k7PzTNlmjbQEn4UXFldcvzI9esXV6+keNK/aUPA1G8KWPQIQGGNt5rn2u4ukoq1tnSwTpfJJZS8j+8sHTiDj2k0kgjepxPz8fSFU00gz6FteqiCdy7Q1MWtszVJMU8nybhMiV1GShSDFqOxN8Ghhi8NvVdiJoIHZqt28wdvDW7gFGlxirpRmt2XJi7BSwHfhoGlyDHD4WOfi/1mY76ouHj8R/7BH2NOiq+OPbs91J1rIXc7DkP5/vtnPiI+F2tbtvEanil+Y5jdRo0D7F1rSsie4Hq1H3rrlNmt/f0xsPHjUIMhRF2PlwLeRSP/N/qT3MV80fOk6eDiX/bDx8mf5Po9N1i+Y2yk1SVtmHIybb1hR3ZLuN+aWHMNvp8NhHivdb5jT7kpyYYK0AbvuFNMELIUVwHk9GzwFN1v4YU/Yg==
  5. https://play.vuejs.org/#eNp9U01v00AQ/SujvbgVIVYbDihyI6CtBEh8CHJjOTj2JN52vWvtrpOgyP+dtzZOLQS9zc68N37zZnwSb5tmvm9ZLIU0WeC60XnglTREWXW1WldMQGhV5EFZk6XI9bVS7fsgwharOw650p6sodPJ8IHu0OTisutAWIy4T79ubd1YwyZQeiZf0/6l2t5I4St7WKugWYrVrTWlih/MNfU59LkeKa3+EyHWCvStdeAriCdl6EeSJ7Nkk8woKZKfaDaCI2AJfX1AXXdukmo19k7PzTNlmjbQEn4UXFldcvzI9esXV6+keNK/aUPA1G8KWPQIQGGNt5rn2u4ukoq1tnSwTpfJJZS8j+8sHTiDj2k0kgjepxPz8fSFU00gz6FteqiCdy7Q1MWtszVJMU8nybhMiV1GShSDFqOxN8Ghhi8NvVdiJoIHZqt28wdvDW7gFGlxirpRmt2XJi7BSwHfhoGlyDHD4WOfi/1mY76ouHj8R/7BH2NOiq+OPbs91J1rIXc7DkP5/vtnPiI+F2tbtvEanil+Y5jdRo0D7F1rSsie4Hq1H3rrlNmt/f0xsPHjUIMhRF2PlwLeRSP/N/qT3MV80fOk6eDiX/bDx8mf5Po9N1i+Y2yk1SVtmHIybb1hR3ZLuN+aWHMNvp8NhHivdb5jT7kpyYYK0AbvuFNMELIUVwHk9GzwFN1v4YU/Yg==
  6. https://play.vuejs.org/#eNqVU1Fv2jAQ/iuWNSkgUaKqe0IBtTA0bdoKGtNe5j6k4QAXx45sh1JF+e87Xwg0W1VpiIfc3Xd3n+++q/hdUQwPJfART1xmZeGZA18WE6GFlnlhrGerAjKZqmnpvdFsY03OomHc8YYSUUjJjHYeMaX0bMwEX3mbPj+CtS+CC53ETQ+qnnjIC5V6QIuxpNtl5KVXMBacSgnObl0Tv4IDaI+BHn302XjCKhbaGgVDZbYnf43NqTD+ViYHNjPaY+DkOjdnhyunjB9tjPFg24xk93GyVJA6YG6XWmAvprRsjQycRHb4rypiVtdJjNg2Le6+qTsk8oUhnEF8wL1D7hu5HT45o3ELFYF4ZvJCKrCLwmNDJ/iIUSTEUqXM81fyeVvCoPVnO8j2b/if3DH4BF9acGAPIPg55lO7BZxvCM9X93DE73MwN+tSIfqd4A/AuZeBYwOblnqNtF/hiO0XUpLU259ufsQ1hCmeiQZkTXjBUUezd55+oXszvKE8oWuc4j9iDHq+7MLSNnbXk6oiXdHWrlt/2D+LW+uxEeBtpmS2R519gFz6XnSS3zyIKxpEnxeLT1EfJTYLMLYxln2Te0jiJv3/ik3v/q51j4xWhn0vs92bdYmyTnO6EFIupuN1oZsgr4WIJrm650116G48K6wpHJ7rGjZSwzJYvd8RTSp66Heggf8FOg8WQtv3/ArveeizhsLp1nn9B120fas=
  7. https://play.vuejs.org/#eNqVU1Fv2jAQ/iuWNSkgUaKqe0IBtTA0bdoKGtNe5j6k4QAXx45sh1JF+e87Xwg0W1VpiIfc3Xd3n+++q/hdUQwPJfART1xmZeGZA18WE6GFlnlhrGerAjKZqmnpvdFsY03OomHc8YYSUUjJjHYeMaX0bMwEX3mbPj+CtS+CC53ETQ+qnnjIC5V6QIuxpNtl5KVXMBacSgnObl0Tv4IDaI+BHn302XjCKhbaGgVDZbYnf43NqTD+ViYHNjPaY+DkOjdnhyunjB9tjPFg24xk93GyVJA6YG6XWmAvprRsjQycRHb4rypiVtdJjNg2Le6+qTsk8oUhnEF8wL1D7hu5HT45o3ELFYF4ZvJCKrCLwmNDJ/iIUSTEUqXM81fyeVvCoPVnO8j2b/if3DH4BF9acGAPIPg55lO7BZxvCM9X93DE73MwN+tSIfqd4A/AuZeBYwOblnqNtF/hiO0XUpLU259ufsQ1hCmeiQZkTXjBUUezd55+oXszvKE8oWuc4j9iDHq+7MLSNnbXk6oiXdHWrlt/2D+LW+uxEeBtpmS2R519gFz6XnSS3zyIKxpEnxeLT1EfJTYLMLYxln2Te0jiJv3/ik3v/q51j4xWhn0vs92bdYmyTnO6EFIupuN1oZsgr4WIJrm650116G48K6wpHJ7rGjZSwzJYvd8RTSp66Heggf8FOg8WQtv3/ArveeizhsLp1nn9B120fas=
  8. https://play.vuejs.org/#eNp9kU9PAjEQxb9K0wtqFCJ4IgvxDxz0oAaJp16WZYBCt23a6Yoh+92ddgOSiNzaeb/XvpnZ8Qdr21UA3ucZQmlVjjAUmrFsdTucroB95ioAk57tdsxBXqCsYJRjPlZQgkZW11mH0MbSG07AQo59JjHSSn031hPOZOw1RqltQFbdlGYOaiD4CVzwBp0FRKPZfaFksSF0bsJMwcUl6aN0zDoNQnjWOWqJrr5w0iLzgMFSRZbWOGSxrwWr2cKZkrVoFq0IF0b71MOfjgeRv2jddVuXEVwETQhF2iehB2PSE9Z2lYYZH/hHu+oKXaesnSZsCs6vOXoKtJDL9tobTcvaxS8EL0xppQL3ZmMEL3ifJSVqNH3z9ZJq6AJc7+vFCorNifrab2NN8HcHHlwFgh80zN0SaAdRHn+8wpbOB5G2FhTRZ8QJeKNCzNhgj0HPKfYRl9I+p41IvZz68RZB+31TMWgk68QLTlt6OtP6b9xeu5d8NFZe/wCjXv/t
  9. https://play.vuejs.org/#eNp9kU9PAjEQxb9K0wtqFCJ4IgvxDxz0oAaJp16WZYBCt23a6Yoh+92ddgOSiNzaeb/XvpnZ8Qdr21UA3ucZQmlVjjAUmrFsdTucroB95ioAk57tdsxBXqCsYJRjPlZQgkZW11mH0MbSG07AQo59JjHSSn031hPOZOw1RqltQFbdlGYOaiD4CVzwBp0FRKPZfaFksSF0bsJMwcUl6aN0zDoNQnjWOWqJrr5w0iLzgMFSRZbWOGSxrwWr2cKZkrVoFq0IF0b71MOfjgeRv2jddVuXEVwETQhF2iehB2PSE9Z2lYYZH/hHu+oKXaesnSZsCs6vOXoKtJDL9tobTcvaxS8EL0xppQL3ZmMEL3ifJSVqNH3z9ZJq6AJc7+vFCorNifrab2NN8HcHHlwFgh80zN0SaAdRHn+8wpbOB5G2FhTRZ8QJeKNCzNhgj0HPKfYRl9I+p41IvZz68RZB+31TMWgk68QLTlt6OtP6b9xeu5d8NFZe/wCjXv/t
  10. https://play.vuejs.org/#eNp9kU9PAjEQxb9K0wtqFCJ4IgvxDxz0oAaJp16WZYBCt23a6Yoh+92ddgOSiNzaeb/XvpnZ8Qdr21UA3ucZQmlVjjAUmrFsdTucroB95ioAk57tdsxBXqCsYJRjPlZQgkZW11mH0MbSG07AQo59JjHSSn031hPOZOw1RqltQFbdlGYOaiD4CVzwBp0FRKPZfaFksSF0bsJMwcUl6aN0zDoNQnjWOWqJrr5w0iLzgMFSRZbWOGSxrwWr2cKZkrVoFq0IF0b71MOfjgeRv2jddVuXEVwETQhF2iehB2PSE9Z2lYYZH/hHu+oKXaesnSZsCs6vOXoKtJDL9tobTcvaxS8EL0xppQL3ZmMEL3ifJSVqNH3z9ZJq6AJc7+vFCorNifrab2NN8HcHHlwFgh80zN0SaAdRHn+8wpbOB5G2FhTRZ8QJeKNCzNhgj0HPKfYRl9I+p41IvZz68RZB+31TMWgk68QLTlt6OtP6b9xeu5d8NFZe/wCjXv/t
  11. https://play.vuejs.org/#eNp9kU9PAjEQxb9K0wtqFCJ4IgvxDxz0oAaJp16WZYBCt23a6Yoh+92ddgOSiNzaeb/XvpnZ8Qdr21UA3ucZQmlVjjAUmrFsdTucroB95ioAk57tdsxBXqCsYJRjPlZQgkZW11mH0MbSG07AQo59JjHSSn031hPOZOw1RqltQFbdlGYOaiD4CVzwBp0FRKPZfaFksSF0bsJMwcUl6aN0zDoNQnjWOWqJrr5w0iLzgMFSRZbWOGSxrwWr2cKZkrVoFq0IF0b71MOfjgeRv2jddVuXEVwETQhF2iehB2PSE9Z2lYYZH/hHu+oKXaesnSZsCs6vOXoKtJDL9tobTcvaxS8EL0xppQL3ZmMEL3ifJSVqNH3z9ZJq6AJc7+vFCorNifrab2NN8HcHHlwFgh80zN0SaAdRHn+8wpbOB5G2FhTRZ8QJeKNCzNhgj0HPKfYRl9I+p41IvZz68RZB+31TMWgk68QLTlt6OtP6b9xeu5d8NFZe/wCjXv/t
  12. https://play.vuejs.org/#eNrVU01P4zAQ/SuzvrArsa0QtyqgBYS0cABEe/QlTSapwfFY9qQtqvrfGTviswghbtyceW9ent+MN+rE+9GyRzVRBWPnbcl4rJ12AFNkNq6Fa4cTKIzzPQM/eDzSqlpgdT+ntVaw/NtRjVaKAcuKzRJn1LYWtRKZF5HZir4v8jP6htSKec9MDv5V1lT3O0w4Ag59ajixVqItxgP/GL7W/Gvnx9OV4WoBIvdOa3Egfk3zkdkzcrVhQ6608B/LGkMxXhzIHYrxmyUoYhWMZ4jIvZeK6TwFhg0EbGALTaAO9mR79hK5IhdZkHeOhfq7KW3EP1lxPEhmebWvOEpbY9rRXSQnS7hJ1iVz6ryxGK59chm1mkBGElZaS6vLXEtR7j/V85w+qN9FGd1EDjcBI4alBPCMcRla5AE+n17hWs7PoMy6T3F9At5iJNsnjwPttHe12H7Fy24vcm7yDmbxfM3o4tOl8i4Ic5v5WkmWZ59c/cXu4egw92m3lRRTz+4rDtqdEs4Ja6Sa6vT9ar5q+whQkF+a
  13. https://play.vuejs.org/#eNp9kU9PAjEQxb9K0wtqFCJ4IgvxDxz0oAaJp16WZYBCt23a6Yoh+92ddgOSiNzaeb/XvpnZ8Qdr21UA3ucZQmlVjjAUmrFsdTucroB95ioAk57tdsxBXqCsYJRjPlZQgkZW11mH0MbSG07AQo59JjHSSn031hPOZOw1RqltQFbdlGYOaiD4CVzwBp0FRKPZfaFksSF0bsJMwcUl6aN0zDoNQnjWOWqJrr5w0iLzgMFSRZbWOGSxrwWr2cKZkrVoFq0IF0b71MOfjgeRv2jddVuXEVwETQhF2iehB2PSE9Z2lYYZH/hHu+oKXaesnSZsCs6vOXoKtJDL9tobTcvaxS8EL0xppQL3ZmMEL3ifJSVqNH3z9ZJq6AJc7+vFCorNifrab2NN8HcHHlwFgh80zN0SaAdRHn+8wpbOB5G2FhTRZ8QJeKNCzNhgj0HPKfYRl9I+p41IvZz68RZB+31TMWgk68QLTlt6OtP6b9xeu5d8NFZe/wCjXv/t
  14. https://play.vuejs.org/#eNp9Ustu2zAQ/JUFUcB24cpo3JMhG33Eh/bQFmnQkw5h6LXEhCIJkZQdCPr3LqkqCRAlN3J3Zjkz3I59sTZrA7INyz3WVnGPu0ID5NXH3XWF8JergCAddB00yIWXLV5yz/cKa9Qe+j5fEXSgrHdXaJH7DUgf0Uo9DNQJZiKuB6LUNnhoP9TmgGpbsAl4wQbobfDeaPgslBT3BD2YcKtwvqD+ZTrmqwFC8Hz1zBJdnWik9eDQB0sVWVvTeIi+jks4cS+qHo6NqWFGicwiRRjtkpMXvreRNZ99upgtIvAYNEFI2KiHxka9E9SsTZHGAa/03l8Uuo9Tk6b5BG4J3D1oAXONp/RDSzDqkE4L2O6gi29DVG8UZsqU8xtRcV1KXQ4O33Ujvgdv6DoO6m+ADPXJVL4aEkvpsSXzjiYeZZndOaNpY9IrBROmtlJh88vGBFzBNv/fpx6tgDn9SDXfkMyxLioU9xP1O3eOtYL9btBh02LBHnueNyXSIsT2/s9PPNP5sUmrExSh32heIaURosYB9jXoA8l+hktqv6e1oKSu3f7sUbvRVBQakX3CF4yW5Nsb1p/krrN14lGurP8HkecvyA==
  15. https://play.vuejs.org/#eNp9Ustu2zAQ/JUFUcB24cpo3JMhG33Eh/bQFmnQkw5h6LXEhCIJkZQdCPr3LqkqCRAlN3J3Zjkz3I59sTZrA7INyz3WVnGPu0ID5NXH3XWF8JergCAddB00yIWXLV5yz/cKa9Qe+j5fEXSgrHdXaJH7DUgf0Uo9DNQJZiKuB6LUNnhoP9TmgGpbsAl4wQbobfDeaPgslBT3BD2YcKtwvqD+ZTrmqwFC8Hz1zBJdnWik9eDQB0sVWVvTeIi+jks4cS+qHo6NqWFGicwiRRjtkpMXvreRNZ99upgtIvAYNEFI2KiHxka9E9SsTZHGAa/03l8Uuo9Tk6b5BG4J3D1oAXONp/RDSzDqkE4L2O6gi29DVG8UZsqU8xtRcV1KXQ4O33Ujvgdv6DoO6m+ADPXJVL4aEkvpsSXzjiYeZZndOaNpY9IrBROmtlJh88vGBFzBNv/fpx6tgDn9SDXfkMyxLioU9xP1O3eOtYL9btBh02LBHnueNyXSIsT2/s9PPNP5sUmrExSh32heIaURosYB9jXoA8l+hktqv6e1oKSu3f7sUbvRVBQakX3CF4yW5Nsb1p/krrN14lGurP8HkecvyA==
  16. Vue SFC Playground https://play.vuejs.org/ Vue & Vite in StackBlitz - https://vite.new/vue Vite & Vue – e.g. in Gitpod.io – npm create vue@latest then add VS Code extension Volar https://gitpod.io/#https://github.com/lucasjellema/vue3-gitpod-starter Chrome Extension Firefox Addon Edge Extension Standalone Electron app
  17. https://blog.logrocket.com/complex-vue-3-state-management-pinia/
  18. https://blog.logrocket.com/complex-vue-3-state-management-pinia/ stackblitz.com/edit/vitejs-vite-9jwcjw?file=src%2Fcomponents%2FHelloWorld.vue
  19. https://blog.logrocket.com/complex-vue-3-state-management-pinia/ stackblitz.com/edit/vitejs-vite-9jwcjw?file=src%2Fcomponents%2FHelloWorld.vue
  20. stackblitz.com/edit/vitejs-vite-9jwcjw?file=src%2Fcomponents%2FHelloWorld.vue
  21. https://lucasjellema.github.io/code-cafe-vue3-people-application/