学习vue之前,最重要是弄懂两个概念,一是“what”,要理解vuex是什么;二是“why”,要清楚为什么要用vuex。
Vuex是什么?
Vuex 类似 React 里面的 Redux 的状态管理器,用来管理Vue的所有组件状态。
为什么使用Vuex?
当你打算开发大型单页应用(SPA),会出现多个视图组件依赖同一个状态,来自不同视图的行为需要变更同一个状态。
遇到以上情况时候,你就应该考虑使用Vuex了,它能把组件的共享状态抽取出来,当做一个全局单例模式进行管理。这样不管你在何处改变状态,都会通知使用该状态的组件做出相应修改。
下面讲解如何使用Vuex
一个简单的Vuex示例
本文就讲解安装Vuex,直接通过代码讲解Vuex使用。
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
上面就是一个简单的Vuex示例,每一个Vuex应用就是一个store,在store中包含组件中的共享状态state和改变状态的方法(暂且称作方法)mutations。
需要注意的是只能通过mutations改变store的state的状态,不能通过store.state.count = 5;直接更改(其实可以更改,不建议这么做,不通过mutations改变state,状态不会被同步)。
使用store.commit方法触发mutations改变state:
store.commit('increment');console.log(store.state.count) // 1
一个简简单单的Vuex应用就实现了。
在Vue组件使用Vuex
如果希望Vuex状态更新的时候,组件数据得到相应的更新,那么可以用计算属性computed获取state的更新状态。
const Counter = {
template: `<div>{{ count }}</div>`,
computed: {
count () {
return store.state.count;
}
}
}
每一个store.state都是全局状态,在使用Vuex时候需要在根组件或(入口文件)注入。
// 根组件
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);
const app = new Vue({
el: '#app',
store,
components: {
Counter
},
template: `
<div class="app">
<counter></counter>
</div>
`
})
通过这种注入机制,就能在子组件Counter通过this.$store访问:
// Counter 组件
const Counter = {
template: `<div>{{ count }}</div>`,










