SlideShare a Scribd company logo
ADVANTAGES OF VUE
EVAN SCHULTZ
WHY VUE?
ADVANTAGES OF VUE
WHY VUE?
▸ Focused
▸ Approachable
▸ Dynamic Data Driven UI
▸ Lazy Loading
▸ Flexible and Scaleable
FOCUSED
WHY VUE?
FOCUSED
▸ Focused on the View
▸ Component Centric
▸ Declarative Templates
▸ Data Binding and Reactivity
FOCUSED
COMPONENT CENTRIC
export default {
props: [], // what are my inputs?
data() { }, // what is my state?
methods: { }, // what can I do?
computed: { } // what is my reactive data?
};
FOCUSED
DECLARATIVE SYNTAX
<template>
<div class="hello">
<h1>{{ msg }}</h1>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data() {
return {
msg: 'Hello Toronto!'
};
}
};
</script>
FOCUSED
DATA BINDING
<input class="input" type="text" v-model="filter" />
<button v-on:click="filter=''">Clear</button>
<ul>
<li v-for="directive in directives">{{directive}}</li>
<li v-if="directives.length === 0”>
No Matches Found for: {{filter}}
</li>
</ul>
FOCUSED
REACTIVITY
<input class="input" type="text" v-model="filter"/>
<input class="input" type="text" v-model="unrelated"/>
<button v-on:click="filter=''">Clear</button>
<p>
Found: {{totalMatches}}
</p>
<ul>
<li v-for="directive in directives">{{directive}}</li>
<li v-if="!hasMatches">No Matches Found for: {{filter}}</li>
</ul>
FOCUSED
REACTIVITY
▸ Vue Tracks Dependant Properties
▸ Caches Values
▸ Executes When Needed
▸ Don’t Need to Understand Observables
▸ Performant Without the Need for Redux-like Solutions For
Many Cases
FOCUSED
REACTIVITY
computed: {
directives() {
return this.allDirectives
.filter(n => n.indexOf(this.filter) >= 0);
},
hasMatches() {
return this.directives.length > 0;
},
totalMatches() {
return this.directives.length;
}
}
APPROACHABLE
WHY VUE?
APPROACHABLE
▸ Intuitive API
▸ Excellent Developer Experience
▸ Lightly Opinionated
▸ Incremental Complexity
▸ Thoughtful Directives
I GOT A GORILLA
HOLDING A BANANA
ALL I WANTED WAS
HELLO WORLD
APPROACHABLE
INCREMENTAL COMPLEXITY
▸ Simple at First
▸ Learn New Concepts as Needed
▸ Builds off of Previous Knowledge
INCREMENTAL COMPLEXITY
5 COMMON QUESTIONS FOR PROPS
▸ What Are My Props?
▸ Can I Type My Props?
▸ Can I Make Them Required?
▸ Can I Provide Defaults?
▸ Can I Validate Them?
5 COMMON QUESTIONS FOR PROPS
WHAT ARE MY PROPS?
<script>
export default {
name: 'WhatAreMyProps',
props: ['age', ‘name’, ‘isActive’]
};
</script>
5 COMMON QUESTIONS FOR PROPS
CAN I TYPE MY PROPS?
<script>
export default {
name: 'TypedProps',
props: {
age: Number,
name: String,
isActive: Boolean
}
};
</script>
5 COMMON QUESTIONS FOR PROPS
CAN I MAKE THEM REQUIRED?
<script>
export default {
name: 'RequiredProps',
props: {
age: Number,
name: {
type: String,
required: true
},
isActive: Boolean
}
};
</script>
5 COMMON QUESTIONS FOR PROPS
CAN I PROVIDE DEFAULTS?
<script>
export default {
name: 'DefaultValues',
props: {
age: Number,
name: String,
isActive: {
type: Boolean,
default: false
}
}
};
</script>
5 COMMON QUESTIONS FOR PROPS
CAN I VALIDATE THEM?
<script>
export default {
name: 'ValidateProps',
props: {
age: {
type: Number,
validator: function(value) {
return value > 0;
}
},
name: String,
isActive: Boolean
}
};
</script>
5 COMMON QUESTIONS FOR PROPS
EVEN THE ERRORS ARE NICE
FORMS SUCK
VUE MAKES
THEM SUCK LESS
FORMS SUCK
DOM EVENTS SUCK
VUE MAKES
THEM SUCK LESS
FORMS SUCK
DOM EVENTS SUCK
APPROACHABLE
HELPFUL DIRECTIVES
▸ Reusable DOM Functionality
▸ Keeps Components Clean
▸ Handle UI Events
▸ Simple Forms
DIRECTIVES
SIMPLE FORMS WITH V-MODEL
<input v-model="message" placeholder="edit me"/>
<input v-model.number="age" type="number"/>
<input v-model.trim="name"/>
DIRECTIVES
GET CONTROL BACK
<input
:value="myAge"
@input=“myAge = $event.target.value"/>
DIRECTIVES
EVENT MODIFIERS - TIRED OF THIS?
function (event) {
// Abort if the element emitting the event is not
// the element the event is bound to
if (event.target !== event.currentTarget) return;
// Abort if the key that went up is not the enter
// key (13) and the shift key was not held down
// at the same time
if (!event.shiftKey || event.keyCode !== 13) return;
// Stop event propagation
event.stopPropagation();
// Prevent the default keyup handler for this element
event.preventDefault();
// ...
}
DIRECTIVES
EVENT MODIFIERS - BIT OF HELP
<input @keyup.enter="submit">
<input @keyup.prevent.enter=“submit”>
<input @keyup.stop.prevent.enter="submit">
DATA DRIVEN
DYNAMIC UI
DATA DRIVEN DYNAMIC UI
DYNAMIC COMPONENTS
▸ Dynamically Render Components Based on Data
▸ Data Driven Forms
▸ Roles and Permissions
▸ A/B Testing
▸ Feature Flags
DYNAMIC COMPONENTS
THE BASICS - COMPONENT :IS CAN BE
<component :is="currentMode"
:label="'Dynamic!'"
:placeholder="'Example Place Holder'"
v-model="demo"></component>
▸ Data Property
▸ Input Property
▸ Computed Property
DYNAMIC COMPONENTS
THE BASICS - COMPONENT
<component :is="currentMode"
:label="'Dynamic!'"
:placeholder="'Example Place Holder'"
v-model="demo"></component>
▸ Props Pass Down As Expected
▸ Events Emit up As Expected
▸ Directives Like v-model Work
DYNAMIC COMPONENTS
THE BASICS - COMPONENT :IS
export default {
name: 'SimpleDynamic',
components: { FancyInput, SimpleInput },
data() {
return {
demo: undefined,
isFancy: true
};
},
computed: {
currentMode() {
return this.isFancy ? 'FancyInput' : 'SimpleInput';
}
}
};
Advantages of Vue JS - Presented at the Rangle.io VueJS Meetup in January
DYNAMIC COMPONENTS
DATA DRIVEN FORMS
<section>
<component
v-for="(field) in schema"
:is="field.type"
v-bind="field"
v-bind:value="value[field.name]"
v-on:input=“update(field.name,$event)">
</component>
</section>
DYNAMIC COMPONENTS
DATA DRIVEN FORMS
export default {
name: 'FormGenerator',
components: {
FancyInput: () => import('@/components/forms/FancyInput'),
SimpleInput: () => import('@/components/forms/SimpleInput'),
CurrencyInput: () => import('@/components/forms/CurrencyInput')
},
props: ['schema', 'value'],
methods: {
update(fieldName, value) {
const updatedForm = { ...this.value, [fieldName]: value };
this.$emit('input', updatedForm);
}
}
};
DYNAMIC COMPONENTS
DATA DRIVEN FORMS - USING THE GENERATOR
<template>
<form-generator :schema="schema" v-model="model"></form-generator>
</template>
<script>
import FormGenerator from '@/components/forms/FormGenerator';
export default {
components: { FormGenerator },
data() {
return {
model: { firstName: ‘Evan',total: '$10.00'},
schema: [
{ type: 'FancyInput', label: 'First Name', name:'firstName' },
{ type: 'CurrencyInput', label: 'Total', name: 'total',
currencies: ['$', '£', ‘€']},
// ….
</script>
Advantages of Vue JS - Presented at the Rangle.io VueJS Meetup in January
LAZY LOADING
LAZY LOADING
WHY IS LAZY GOOD?
▸ Reduced Load Times
▸ Load What You Need, When You Need It
▸ Control of What Loads When
LAZY LOADING
WHY IS VUE GOOD AT BEING LAZY?
▸ So Easy, it’s Boring.
▸ Lazy Load Routes
▸ Lazy Load Components
▸ “Just Works”
LAZY LOADING
LAZY ROUTES
Vue.use(Router);
export default new Router({
routes: [{
path: '/lazy',
name: 'LazyRoute',
component: () => import('@/components/LazyRoute')
}]
});
LAZY LOADING
PER-COMPONENT LAZY LOADING
<template>
<div class="hello">
<button @click="toggleLazy()">Show Lazy</button>
<lazy v-if="showLazy"></lazy>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
components: {
lazy: () => import('./LazyComponent.vue')
},
</script>
FLEXIBLE AND
SCALEABLE
FLEXIBLE AND SCALEABLE
FLEXIBLE
▸ Can Provide Your Own Render
▸ JSX If You Want
▸ Scales with Complexity as Needed
▸ Routing - Vue Router
▸ State Management - Vuex
THANKS! Evan Schultz
@e_p82
e-schultz/vue-meetup-example
evan@rangle.io

More Related Content

PDF
Creating 'Vuetiful' Data-Driven User Interfaces
PDF
Kakunin E2E framework showcase
PDF
A Journey with React
PDF
Get AngularJS Started!
PDF
Advanced React Component Patterns - ReactNext 2018
PDF
Frontin like-a-backer
PPT
jQuery 1.7 Events
PDF
ReactJS
Creating 'Vuetiful' Data-Driven User Interfaces
Kakunin E2E framework showcase
A Journey with React
Get AngularJS Started!
Advanced React Component Patterns - ReactNext 2018
Frontin like-a-backer
jQuery 1.7 Events
ReactJS

What's hot (20)

PDF
Meet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
PDF
Redux vs Alt
PDF
Ditching JQuery
PDF
Barely Enough Design
PDF
Angular Directives from Scratch
PDF
Apex 5 plugins for everyone version 2018
PPTX
Continously delivering
PDF
Scalable CSS You and Your Back-End Coders Can Love - @CSSConf Asia 2014
KEY
JavaScript Testing for Rubyists
PDF
GWT integration with Vaadin
PDF
Manipulating Magento - Mage Titans Italy 2018
PDF
Learning React: Facebook's Javascript Library For Building User Interfaces
PDF
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
PPTX
AngularJS Directives
PPTX
Using of TDD practices for Magento
PPTX
Getting the Most Out of jQuery Widgets
ODP
Introduction to Angular js
PPTX
Protractor Training in Pune by QuickITDotnet
PDF
Sane Async Patterns
PDF
Angular2 & ngrx/store: Game of States
Meet Magento Sweden - Magento 2 Layout and Code Compilation for Performance
Redux vs Alt
Ditching JQuery
Barely Enough Design
Angular Directives from Scratch
Apex 5 plugins for everyone version 2018
Continously delivering
Scalable CSS You and Your Back-End Coders Can Love - @CSSConf Asia 2014
JavaScript Testing for Rubyists
GWT integration with Vaadin
Manipulating Magento - Mage Titans Italy 2018
Learning React: Facebook's Javascript Library For Building User Interfaces
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
AngularJS Directives
Using of TDD practices for Magento
Getting the Most Out of jQuery Widgets
Introduction to Angular js
Protractor Training in Pune by QuickITDotnet
Sane Async Patterns
Angular2 & ngrx/store: Game of States
Ad

Similar to Advantages of Vue JS - Presented at the Rangle.io VueJS Meetup in January (20)

PDF
Vue fundamentasl with Testing and Vuex
PPTX
An introduction to Vue.js
PDF
Vue.js for beginners
PDF
Learning Vue Directives.pdf
PDF
Meet VueJs
PDF
VueJS: The Simple Revolution
PPTX
Vue js for beginner
PDF
Vue.js
ODP
An Introduction to Vuejs
PPTX
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
PDF
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
ODP
Basics of VueJS
PDF
Introduction to Vue.js
PDF
Quasar Framework Introduction for C++ develpoers
PDF
Intro to VueJS Workshop
PDF
Introduction to VueJS & Vuex
PDF
Vue.js - An Introduction
PDF
Why Vue JS
PPT
Vue.js Getting Started
PDF
The Point of Vue - Intro to Vue.js
Vue fundamentasl with Testing and Vuex
An introduction to Vue.js
Vue.js for beginners
Learning Vue Directives.pdf
Meet VueJs
VueJS: The Simple Revolution
Vue js for beginner
Vue.js
An Introduction to Vuejs
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ITB2019 ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 V...
Basics of VueJS
Introduction to Vue.js
Quasar Framework Introduction for C++ develpoers
Intro to VueJS Workshop
Introduction to VueJS & Vuex
Vue.js - An Introduction
Why Vue JS
Vue.js Getting Started
The Point of Vue - Intro to Vue.js
Ad

Recently uploaded (20)

PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
sap open course for s4hana steps from ECC to s4
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
MYSQL Presentation for SQL database connectivity
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Big Data Technologies - Introduction.pptx
PPT
Teaching material agriculture food technology
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
A Presentation on Artificial Intelligence
PDF
Empathic Computing: Creating Shared Understanding
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Programs and apps: productivity, graphics, security and other tools
Agricultural_Statistics_at_a_Glance_2022_0.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
sap open course for s4hana steps from ECC to s4
A comparative analysis of optical character recognition models for extracting...
Network Security Unit 5.pdf for BCA BBA.
MYSQL Presentation for SQL database connectivity
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Big Data Technologies - Introduction.pptx
Teaching material agriculture food technology
Mobile App Security Testing_ A Comprehensive Guide.pdf
Assigned Numbers - 2025 - Bluetooth® Document
Reach Out and Touch Someone: Haptics and Empathic Computing
A Presentation on Artificial Intelligence
Empathic Computing: Creating Shared Understanding
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Review of recent advances in non-invasive hemoglobin estimation
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

Advantages of Vue JS - Presented at the Rangle.io VueJS Meetup in January

  • 3. ADVANTAGES OF VUE WHY VUE? ▸ Focused ▸ Approachable ▸ Dynamic Data Driven UI ▸ Lazy Loading ▸ Flexible and Scaleable
  • 5. WHY VUE? FOCUSED ▸ Focused on the View ▸ Component Centric ▸ Declarative Templates ▸ Data Binding and Reactivity
  • 6. FOCUSED COMPONENT CENTRIC export default { props: [], // what are my inputs? data() { }, // what is my state? methods: { }, // what can I do? computed: { } // what is my reactive data? };
  • 7. FOCUSED DECLARATIVE SYNTAX <template> <div class="hello"> <h1>{{ msg }}</h1> </div> </template> <script> export default { name: 'HelloWorld', data() { return { msg: 'Hello Toronto!' }; } }; </script>
  • 8. FOCUSED DATA BINDING <input class="input" type="text" v-model="filter" /> <button v-on:click="filter=''">Clear</button> <ul> <li v-for="directive in directives">{{directive}}</li> <li v-if="directives.length === 0”> No Matches Found for: {{filter}} </li> </ul>
  • 9. FOCUSED REACTIVITY <input class="input" type="text" v-model="filter"/> <input class="input" type="text" v-model="unrelated"/> <button v-on:click="filter=''">Clear</button> <p> Found: {{totalMatches}} </p> <ul> <li v-for="directive in directives">{{directive}}</li> <li v-if="!hasMatches">No Matches Found for: {{filter}}</li> </ul>
  • 10. FOCUSED REACTIVITY ▸ Vue Tracks Dependant Properties ▸ Caches Values ▸ Executes When Needed ▸ Don’t Need to Understand Observables ▸ Performant Without the Need for Redux-like Solutions For Many Cases
  • 11. FOCUSED REACTIVITY computed: { directives() { return this.allDirectives .filter(n => n.indexOf(this.filter) >= 0); }, hasMatches() { return this.directives.length > 0; }, totalMatches() { return this.directives.length; } }
  • 13. WHY VUE? APPROACHABLE ▸ Intuitive API ▸ Excellent Developer Experience ▸ Lightly Opinionated ▸ Incremental Complexity ▸ Thoughtful Directives
  • 14. I GOT A GORILLA HOLDING A BANANA ALL I WANTED WAS HELLO WORLD
  • 15. APPROACHABLE INCREMENTAL COMPLEXITY ▸ Simple at First ▸ Learn New Concepts as Needed ▸ Builds off of Previous Knowledge
  • 16. INCREMENTAL COMPLEXITY 5 COMMON QUESTIONS FOR PROPS ▸ What Are My Props? ▸ Can I Type My Props? ▸ Can I Make Them Required? ▸ Can I Provide Defaults? ▸ Can I Validate Them?
  • 17. 5 COMMON QUESTIONS FOR PROPS WHAT ARE MY PROPS? <script> export default { name: 'WhatAreMyProps', props: ['age', ‘name’, ‘isActive’] }; </script>
  • 18. 5 COMMON QUESTIONS FOR PROPS CAN I TYPE MY PROPS? <script> export default { name: 'TypedProps', props: { age: Number, name: String, isActive: Boolean } }; </script>
  • 19. 5 COMMON QUESTIONS FOR PROPS CAN I MAKE THEM REQUIRED? <script> export default { name: 'RequiredProps', props: { age: Number, name: { type: String, required: true }, isActive: Boolean } }; </script>
  • 20. 5 COMMON QUESTIONS FOR PROPS CAN I PROVIDE DEFAULTS? <script> export default { name: 'DefaultValues', props: { age: Number, name: String, isActive: { type: Boolean, default: false } } }; </script>
  • 21. 5 COMMON QUESTIONS FOR PROPS CAN I VALIDATE THEM? <script> export default { name: 'ValidateProps', props: { age: { type: Number, validator: function(value) { return value > 0; } }, name: String, isActive: Boolean } }; </script>
  • 22. 5 COMMON QUESTIONS FOR PROPS EVEN THE ERRORS ARE NICE
  • 24. VUE MAKES THEM SUCK LESS FORMS SUCK DOM EVENTS SUCK
  • 25. VUE MAKES THEM SUCK LESS FORMS SUCK DOM EVENTS SUCK
  • 26. APPROACHABLE HELPFUL DIRECTIVES ▸ Reusable DOM Functionality ▸ Keeps Components Clean ▸ Handle UI Events ▸ Simple Forms
  • 27. DIRECTIVES SIMPLE FORMS WITH V-MODEL <input v-model="message" placeholder="edit me"/> <input v-model.number="age" type="number"/> <input v-model.trim="name"/>
  • 29. DIRECTIVES EVENT MODIFIERS - TIRED OF THIS? function (event) { // Abort if the element emitting the event is not // the element the event is bound to if (event.target !== event.currentTarget) return; // Abort if the key that went up is not the enter // key (13) and the shift key was not held down // at the same time if (!event.shiftKey || event.keyCode !== 13) return; // Stop event propagation event.stopPropagation(); // Prevent the default keyup handler for this element event.preventDefault(); // ... }
  • 30. DIRECTIVES EVENT MODIFIERS - BIT OF HELP <input @keyup.enter="submit"> <input @keyup.prevent.enter=“submit”> <input @keyup.stop.prevent.enter="submit">
  • 32. DATA DRIVEN DYNAMIC UI DYNAMIC COMPONENTS ▸ Dynamically Render Components Based on Data ▸ Data Driven Forms ▸ Roles and Permissions ▸ A/B Testing ▸ Feature Flags
  • 33. DYNAMIC COMPONENTS THE BASICS - COMPONENT :IS CAN BE <component :is="currentMode" :label="'Dynamic!'" :placeholder="'Example Place Holder'" v-model="demo"></component> ▸ Data Property ▸ Input Property ▸ Computed Property
  • 34. DYNAMIC COMPONENTS THE BASICS - COMPONENT <component :is="currentMode" :label="'Dynamic!'" :placeholder="'Example Place Holder'" v-model="demo"></component> ▸ Props Pass Down As Expected ▸ Events Emit up As Expected ▸ Directives Like v-model Work
  • 35. DYNAMIC COMPONENTS THE BASICS - COMPONENT :IS export default { name: 'SimpleDynamic', components: { FancyInput, SimpleInput }, data() { return { demo: undefined, isFancy: true }; }, computed: { currentMode() { return this.isFancy ? 'FancyInput' : 'SimpleInput'; } } };
  • 37. DYNAMIC COMPONENTS DATA DRIVEN FORMS <section> <component v-for="(field) in schema" :is="field.type" v-bind="field" v-bind:value="value[field.name]" v-on:input=“update(field.name,$event)"> </component> </section>
  • 38. DYNAMIC COMPONENTS DATA DRIVEN FORMS export default { name: 'FormGenerator', components: { FancyInput: () => import('@/components/forms/FancyInput'), SimpleInput: () => import('@/components/forms/SimpleInput'), CurrencyInput: () => import('@/components/forms/CurrencyInput') }, props: ['schema', 'value'], methods: { update(fieldName, value) { const updatedForm = { ...this.value, [fieldName]: value }; this.$emit('input', updatedForm); } } };
  • 39. DYNAMIC COMPONENTS DATA DRIVEN FORMS - USING THE GENERATOR <template> <form-generator :schema="schema" v-model="model"></form-generator> </template> <script> import FormGenerator from '@/components/forms/FormGenerator'; export default { components: { FormGenerator }, data() { return { model: { firstName: ‘Evan',total: '$10.00'}, schema: [ { type: 'FancyInput', label: 'First Name', name:'firstName' }, { type: 'CurrencyInput', label: 'Total', name: 'total', currencies: ['$', '£', ‘€']}, // …. </script>
  • 42. LAZY LOADING WHY IS LAZY GOOD? ▸ Reduced Load Times ▸ Load What You Need, When You Need It ▸ Control of What Loads When
  • 43. LAZY LOADING WHY IS VUE GOOD AT BEING LAZY? ▸ So Easy, it’s Boring. ▸ Lazy Load Routes ▸ Lazy Load Components ▸ “Just Works”
  • 44. LAZY LOADING LAZY ROUTES Vue.use(Router); export default new Router({ routes: [{ path: '/lazy', name: 'LazyRoute', component: () => import('@/components/LazyRoute') }] });
  • 45. LAZY LOADING PER-COMPONENT LAZY LOADING <template> <div class="hello"> <button @click="toggleLazy()">Show Lazy</button> <lazy v-if="showLazy"></lazy> </div> </template> <script> export default { name: 'HelloWorld', components: { lazy: () => import('./LazyComponent.vue') }, </script>
  • 47. FLEXIBLE AND SCALEABLE FLEXIBLE ▸ Can Provide Your Own Render ▸ JSX If You Want ▸ Scales with Complexity as Needed ▸ Routing - Vue Router ▸ State Management - Vuex