Vue.js

 Vue.js (commonly referred to as Vue; pronounced "view"[4]) is an open-source model–view–viewmodel front end JavaScript framework for building user interfaces and single-page applications.[10] It was created by Evan You, and is maintained by him and the rest of the active core team members.[11]

Overview[edit]

Vue.js features an incrementally adaptable architecture that focuses on declarative rendering and component composition. The core library is focused on the view layer only.[4] Advanced features required for complex applications such as routingstate management and build tooling are offered via officially maintained supporting libraries and packages.[12]

Vue.js allows for extending HTML with HTML attributes called directives.[13] The directives offer functionality to HTML applications, and come as either built-in or user defined directives.

History[edit]

Vue was created by Evan You after working for Google using AngularJS in several projects. He later summed up his thought process: "I figured, what if I could just extract the part that I really liked about Angular and build something really lightweight."[14] The first source code commit to the project was dated July 2013, and Vue was first released the following February, in 2014.

Version names are often derived from manga and anime, most of which are within the science fiction genre.

Versions[edit]

VersionRelease dateTitleEnd of LTSEnd of Life
3.2August 5, 2021Quintessential Quintuplets[15]
3.1June 7, 2021Pluto[16]
3.0September 18, 2020One Piece[17]
2.7July 1, 2022Naruto[18]December 31, 2023December 31, 2023
2.6February 4, 2019Macross[19]March 18, 2022September 18, 2023
2.5October 13, 2017Level E[20]
2.4July 13, 2017Kill la Kill[21]
2.3April 27, 2017JoJo's Bizarre Adventure[22]
2.2February 26, 2017Initial D[23]
2.1November 22, 2016Hunter X Hunter[24]
2.0September 30, 2016Ghost in the Shell[25]
1.0October 27, 2015Evangelion[26]
0.12June 12, 2015Dragon Ball[27]
0.11November 7, 2014Cowboy Bebop[28]
0.10March 23, 2014Blade Runner[29]
0.9February 25, 2014Animatrix[30]
0.8January 27, 2014[31]
0.7December 24, 2013[32]
0.6December 8, 2013VueJS[33]

When a new major is released ie v3.y.z, the last minor ie 2.x.y will become a LTS release for 18 months (bug fixes and security patches) and for the following 18 months will be in maintenance mode (security patches only).[34]

Features[edit]

Components[edit]

Vue components extend basic HTML elements to encapsulate reusable code. At a high level, components are custom elements to which the Vue's compiler attaches behavior. In Vue, a component is essentially a Vue instance with pre-defined options.[35] The code snippet below contains an example of a Vue component. The component presents a button and prints the number of times the button is clicked:

<template>
  <div id="tuto">
    <button-clicked v-bind:initial-count="0"></button-clicked>
  </div>
</template>

<script>
Vue.component('button-clicked', {
  props: ['initialCount'],
  data: () => ({
    count: 0,
  }),
  template: '<button v-on:click="onClick">Clicked {{ count }} times</button>',
  computed: {
    countTimesTwo() {
      return this.count * 2;
    }
  },
  watch: {
    count(newValue, oldValue) {
      console.log(`The value of count is changed from ${oldValue} to ${newValue}.`);
    }
  },
  methods: {
    onClick() {
      this.count += 1;
    }
  },
  mounted() {
    this.count = this.initialCount;
  }
});

new Vue({
  el: '#tuto',
});
</script>

Templates[edit]

Vue uses an HTML-based template syntax that allows binding the rendered DOM to the underlying Vue instance's data. All Vue templates are valid HTML that can be parsed by specification-compliant browsers and HTML parsers. Vue compiles the templates into virtual DOM render functions. A virtual Document Object Model (or "DOM") allows Vue to render components in its memory before updating the browser. Combined with the reactivity system, Vue can calculate the minimal number of components to re-render and apply the minimal amount of DOM manipulations when the app state changes.

Vue users can use template syntax or choose to directly write render functions using hyperscript either through function calls or JSX.[36] Render functions allow applications to be built from software components.[37]

Reactivity[edit]

Vue features a reactivity system that uses plain JavaScript objects and optimized re-rendering. Each component keeps track of its reactive dependencies during its render, so the system knows precisely when to re-render, and which components to re-render.[38]

Transitions[edit]

Vue provides a variety of ways to apply transition effects when items are inserted, updated, or removed from the DOM. This includes tools to:

  • Automatically apply classes for CSS transitions and animations
  • Integrate third-party CSS animation libraries, such as Animate.css
  • Use JavaScript to directly manipulate the DOM during transition hooks
  • Integrate third-party JavaScript animation libraries, such as Velocity.js

When an element wrapped in a transition component is inserted or removed, this is what happens:

  1. Vue will automatically sniff whether the target element has CSS transitions or animations applied. If it does, CSS transition classes will be added/removed at appropriate timings.
  2. If the transition component provided JavaScript hooks, these hooks will be called at appropriate timings.
  3. If no CSS transitions/animations are detected and no JavaScript hooks are provided, the DOM operations for insertion and/or removal will be executed immediately on next frame.[39][40]

Routing[edit]

A traditional disadvantage of single-page applications (SPAs) is the inability to share links to the exact "sub" page within a specific web page. Because SPAs serve their users only one URL-based response from the server (it typically serves index.html or index.vue), bookmarking certain screens or sharing links to specific sections is normally difficult if not impossible. To solve this problem, many client-side routers delimit their dynamic URLs with a "hashbang" (#!), e.g. page.com/#!/. However, with HTML5 most modern browsers support routing without hashbangs.

Vue provides an interface to change what is displayed on the page based on the current URL path – regardless of how it was changed (whether by emailed link, refresh, or in-page links). Additionally, using a front-end router allows for the intentional transition of the browser path when certain browser events (i.e. clicks) occur on buttons or links. Vue itself doesn't come with front-end hashed routing. But the open-source "vue-router" package provides an API to update the application's URL, supports the back button (navigating history), and email password resets or email verification links with authentication URL parameters. It supports mapping nested routes to nested components and offers fine-grained transition control. With Vue, developers are already composing applications with small building blocks building larger components. With vue-router added to the mix, components must merely be mapped to the routes they belong to, and parent/root routes must indicate where children should render.[41]

<div id="app">
  <router-view></router-view>
</div>
...

<script>
...
const User = {
  template: '<div>User {{ $route.params.id }}</div>'
};

const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User }
  ]
});
...
</script>

The code above:

  1. Sets a front-end route at websitename.com/user/<id>.
  2. Which will render in the User component defined in (const User...)
  3. Allows the User component to pass in the particular id of the user which was typed into the URL using the $route object's params key: $route.params.id.
  4. This template (varying by the params passed into the router) will be rendered into <router-view></router-view> inside the DOM's div#app.
  5. The finally generated HTML for someone typing in: websitename.com/user/1 will be:
<div id="app">
  <div>
    <div>User 1</div>
  </div>
</div>

[42]

Ecosystem[edit]

The core library comes with tools and libraries both developed by the core team and contributors.

Official tooling[edit]

  • Devtools – Browser devtools extension for debugging Vue.js applications
  • Vue CLI – Standard Tooling for rapid Vue.js development
  • Vue Loader – a webpack loader that allows the writing of Vue components in a format called Single-File Components (SFCs)

Official libraries[edit]

  • Vue Router – The official router
  • Vuex – Flux-inspired centralized state management
  • Vue Server Renderer – Server-Side Rendering
  • Pinia – New simple state management

See also[edit]

Sources[edit]

Definition of Free Cultural Works logo notext.svg This article incorporates text from a free content work. Licensed under MIT License License statement/permission. Text taken from Vue.js Guide, Vue.js, To learn how to add open license text to Wikipedia articles, please see this how-to page. For information on reusing text from Wikipedia, please see the terms of use.

References[edit]

  1. ^ "First Week of Launching Vue.js"Evan You.
  2. ^ "Release 2.4.4". September 14, 2017. Retrieved March 15, 2018.
  3. ^ "vue/LICENSE"Vue.js. Retrieved April 17, 2017 – via GitHub.
  4. Jump up to:a b c "Introduction"Vuejs.org. Retrieved January 3, 2020.
  5. ^ Macrae, Callum (2018). Vue.js: Up and Running: Building Accessible and Performant Web AppsO'Reilly MediaISBN 978-1-4919-9721-5.
  6. ^ Nelson, Brett (2018). Getting to Know Vue.js: Learn to Build Single Page Applications in Vue from ScratchApressISBN 978-1-4842-3781-6.
  7. ^ Yerburgh, Edd (2019). Testing Vue.js ApplicationsManning PublicationsISBN 978-1-61729-524-9.
  8. ^ Freeman, Adam (2018). Pro Vue.js 2ApressISBN 978-1-4842-3805-9.
  9. ^ Franklin, Jack; Wanyoike, Michael; Bouchefra, Ahmed; Silas, Kingsley; Campbell, Chad A.; Jacques, Nilson; Omole, Olayinka; Mulders, Michiel (2019). Working with Vue.jsSitePointISBN 978-1-4920-7144-0.
  10. ^ [5][6][7][8][9][4]
  11. ^ "Meet the Team"Vuejs.org. Retrieved September 23, 2019.
  12. ^ "Evan is creating Vue.js"Patreon. Retrieved March 11, 2017.
  13. ^ "What is Vue.js"W3Schools. Retrieved January 21, 2020.
  14. ^ "Evan You"Between the Wires. November 3, 2016. Archived from the original on June 3, 2017. Retrieved August 26, 2017.
  15. ^ "v3.2.0 Quintessential Quintuplets"Vue.js. August 5, 2021. Retrieved August 10, 2021 – via GitHub.
  16. ^ "v3.1.0 Pluto"Vue.js. June 7, 2021. Retrieved July 18, 2021 – via GitHub.
  17. ^ "v3.0.0 One Piece"Vue.js. September 18, 2020. Retrieved September 23, 2020 – via GitHub.
  18. ^ "v2.7.0 Naruto"Vue.js. July 1, 2022. Retrieved July 1, 2022 – via GitHub.
  19. ^ "v2.6.0 Macross"Vue.js. February 4, 2019. Retrieved September 23, 2020 – via GitHub.
  20. ^ "v2.5.0 Level E"Vue.js. October 13, 2017. Retrieved September 23, 2020 – via GitHub.
  21. ^ "v2.4.0 Kill la Kill"Vue.js. July 13, 2017. Retrieved September 23, 2020 – via GitHub.
  22. ^ "v2.3.0 JoJo's Bizarre Adventure"Vue.js. April 27, 2017. Retrieved September 23, 2020 – via GitHub.
  23. ^ "v2.2.0 Initial D"Vue.js. February 26, 2017. Retrieved September 23, 2020 – via GitHub.
  24. ^ "v2.1.0 Hunter X Hunter"Vue.js. November 22, 2016. Retrieved September 23, 2020 – via GitHub.
  25. ^ "v2.0.0 Ghost in the Shell"Vue.js. September 30, 2016. Retrieved September 23, 2020 – via GitHub.
  26. ^ "1.0.0 Evangelion"Vue.js. October 27, 2015. Retrieved September 23, 2020 – via GitHub.
  27. ^ "0.12.0: Dragon Ball"Vue.js. June 12, 2015. Retrieved September 23, 2020 – via GitHub.
  28. ^ "v0.11.0: Cowboy Bebop"Vue.js. November 7, 2014. Retrieved September 23, 2020 – via GitHub.
  29. ^ "v0.10.0: Blade Runner"Vue.js. March 23, 2014. Retrieved September 23, 2020 – via GitHub.
  30. ^ "v0.9.0: Animatrix"Vue.js. February 25, 2014. Retrieved September 23, 2020 – via GitHub.
  31. ^ "v0.8.0"Vue.js. January 27, 2014. Retrieved September 23, 2020 – via GitHub.
  32. ^ "v0.7.0"Vue.js. December 24, 2013. Retrieved September 23, 2020 – via GitHub.
  33. ^ "0.6.0: VueJS"Vue.js. December 8, 2013. Retrieved September 23, 2020 – via GitHub.
  34. ^ "Vue Roadmap"Vue.js – via GitHub.
  35. ^ "Components"Vuejs.org. Retrieved March 11, 2017.
  36. ^ "Template Syntax"Vuejs.org. Retrieved March 11, 2017.
  37. ^ "Vue 2.0 is Here!"The Vue Point. September 30, 2016. Retrieved March 11, 2017.
  38. ^ "Reactivity in Depth"Vuejs.org. Retrieved March 11, 2017.
  39. ^ "Transition Effects"Vuejs.org. Retrieved March 11, 2017.
  40. ^ "Transitioning State"Vuejs.org. Retrieved March 11, 2017.
  41. ^ "Routing"Vuejs.org. Retrieved March 11, 2017.
  42. ^ You, Evan. "Vue Nested Routing (2)"Vue Home Page (subpage). Retrieved May 10, 2017.

Comments

Popular posts from this blog

Transform Your Body Naturally: The Secret to a Leaner Belly and Toned Butt

Discover BFF Gram: The Ultimate Networking App for Connecting Families and Friends

Seamless 3-Piece Yoga Set