Vuex 是一个专为Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
1. 开始
每一个Vuex 应用的核心就是store (仓库)。“store”基本上就是一个容器,它包含着你的应用大部分的状态(state) 。Vuex和单纯的全局对象有以下两点不同:
- Vuex 的状态存储时响应式的。当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 你不能直接改变store中的状态。改变store中的状态的唯一途径就是显示地提交( commit )mutation。这样使得外面可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用
2. 最简单的store
安装Vuex之后,让我们来创建一个 store 。创建过程直截了当——仅需要提供一个初始state对象和一些mutation ```vue import Vue from ‘vue’ import Vuex from ‘vuex’
Vue.use(Vuex) // Vue
const store = new Vuex.store({ state:{ count:0; }, mutations:{ increment(state){ state.count++ } } })
现在,我们可以通过 store.state 来获取状态对象,以及通过store.commit 方法触发状态变更:
```vue
store.commit('increment')
console.log(store.state.count) // -> 1
为了在Vue组件中访问 this.$store prototype,你需要为Vue实例提供创建好的store。Vuex提供了一个从根组件向所有子组件,以store选项的方法“注入”该store的机制
new Vue({
el:"#app",
store:store // es6 语法 store即可
})
在组件里使用this.$store.state 进行访问状态。使用 this.$store.commit 来提交一个变更
methods:{
increment(){
this.$store.commit('increment')
console.log(this.$store.state.count)
}
}
再次强调,我们通过提交mutation的方式,而非直接改变 store.state.count
由于store中的状态是响应式的,在组件中调用store中的状态简单到仅需要在计算属性 中返回即可。
触发变化也仅仅是在组件的methods中提交mutation