Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。
一、Vuex 和全局对象的区别:
- Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
二、创建store
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
可以通过 store.state
来获取状态对象,
以及通过 store.commit
方法触发状态变更
store.commit('increment')
console.log(store.state.count) // -> 1
Vuex 提供了一个从根组件向所有子组件,以 store 选项的方式“注入”该 store 的机制( 为了在 Vue 组件中访问 this.$store
property )
new Vue({
el: '#app',
// 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
store: store,
})
由于 store 中的状态是响应式的,
在组件中调用 store 中的状态简单到仅需要在计算属性中返回即可。
触发变化也仅仅是在组件的 methods 中提交 mutation。
三、state
Vuex 使用单一状态树:用一个对象就包含了全部的应用层级状态。作为一个“唯一数据源 (SSOT)”而存在。
【 每个应用将仅仅包含一个 store 实例。】
- 在 组件中获得 Vuex 状态
读取状态最简单的方法就是在计算属性中返回某个状态
const Counter = {
template: `