Vuex Tutorial
Vuex is the official state management library for Vue applications.
In this beginners tutorial, you'll be learning about Vuex and how you can use it to deal with complex data requirements in your front-end application.
In this tutorial, we make the assumption that you don't have and previous experience working with Vuex.
Let's get started with this tutorial—so what's Vuex?
Vuex is a a Vue implementation of the Flux state management pattern. It's a library for working with data in your Vue applications.
Vuex is the official state management library for Vue.js
Vuex enables developers to make complex data management easier and more efficient by using a global data store that can be accessed from all components of the Vue application for getting or setting data.
Vuex allows yo to efficiently share data between the application components.
Vue Components can use different ways to communicate data between each other, such as:
- props: Props are used to pass state from a parent component to its children,
- events: Events are used to change the state of a component from its children.
Props and events can be enough for simple scenarios but once the data requirements for your application becomes complex, you'll need to implement other advanced strategies or patterns.
Among these patterns is the Flux pattern which aims to centralize the state across an application. In a Vue application, you can implement this pattern using Vuex.
Another popular implementation of the Flux pattern is Redux which more popular among React developers. But Redux is framework-agnostic which means you can also use it with Vue.
With that said, Vuex is the better option in Vue because it offers a better integration since it's the official library for state management in Vue.
Prerequisites
In order to compete this tutorial, you need to have a few requirements such as:
- A development environment ready with Node.js 8.9+ and NPM installed,
- A basic knowledge of modern JavaScript,
- A working experience of Vue.js.
That's all what you need. You'll install the other requirements throughout this tutorial.
Installing the Vue.js CLI v3
In this tutorial, we'll be using the latest version of Vue.js CLI to generate a new Vue project so first let's start by installing the CLI.
Head back to your terminal and run the following command:
$ npm install @vue/cli -g
Since your are installing the CLI globally on you system, make sure you have the required permissions by configuring your npm configuration or simply use sudo before you command.
Creating a New Vue.js Project
After installing the Vue CLI, let's use it to generate a new project by running the following command in your terminal:
$ vue create vuex-demo
This will generate a vuex-demo
project in your current directory.
The CLI will be asking for a preset that will be used for your project. You can also manually choose the features needed for your project from a set of official plugins like Babel, TypeScript, PWA, Vue Router and Vuex.
So go ahead and manually select Babel, Vue Router and Vuex for your project.
The CLI will also ask you for some other options for configuring the router such as router history
and dedicated config files
. You can also choose if you want to save the preset or not.
To make sure everything works as expected, navigate inside your project's folder:
$ cd vuex-demo
Next run the development server using:
$ npm run serve
You should be able to go to the localhost;8080
address to see you application running:
That's it, you are now ready to start learning Vuex by implementing a simple application that manages its state using a central store.
Creating the Components
Now that we have created our project, let's create the components of our application.
Under the src/components
folder, create two ContactList.vue
and ContactDetail
files:
$ cd src/components
$ touch ContactList.vue
$ touch ContactDetail.vue
Next open the src/App.vue
file and add a link to ContactList.vue
component:
<template>
<div id="app">
<nav>
<router-link to="/contacts" exact>Contact List</router-link>
</nav>
<router-view/>
</div>
</template>
Next open the src/router.js
file and add a new route to the ContactList.vue
component:
import ContactList from './components/ContactList.vue'
import ContactDetail from './components/ContactDetail.vue'
Vue.use(Router)
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
linkClass: "nav-link",
linkActiveClass: "active",
routes: [
{
path: '/contacts',
name: 'list',
component: ContactList },
{
path: '/contacts/:id',
name: 'detail',
component: ContactDetail
},
]
})
For now, add the following template inside the src/components/ContactList.vue
file:
<template>
<div class="contact-list">
<h1>
Contact List
</h1>
</div>
</template>
Also inside the src/components/ContactDetail.vue
file, add the following template:
<template>
<div class="contact-detail">
<h1>
Contact Details
</h1>
</div>
</template>
That's all for now about components.
The Vuex Basics
Before continue building our Vue application, let's first understand the Vuex basics.
What's a Vuex Store
A Vuex store is a central object for storing data in your Vue application. It also provides different methods for accessing and mutating global state.
This is an example of a basic store:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({})
We use the Vuex.Store
method to create a store. It takes different properties, such as:
state
; this object contains the actual state of the application i.e any variables and array etc.mutations
: this object contains the methods that will be used to mutate the state,actions
: this object contains methods that call the mutation methods.
Mutations
Mutations are functions that enable you to mutate and upsate the state in a Vuex store. These function can not be called directly but instead they need to be committed using the .commit('mutation')
of the Vuex store.
Mutations are synchronous functions.
Actions
Actions are functions that can be used to commit the mutations.
Actions can do asynchronous operations.
Conclusion
In this first part of the Vuex tutorial, we've installed the Vue CLI and used it to create a Vue demo that will be used to demonstrate the different concepts of Vuex.
We've also seen basic concepts like the Vuex store, state, mutations and actions.
-
Date: