Vuex 是一个专为Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

1. 开始

每一个Vuex 应用的核心就是store (仓库)。“store”基本上就是一个容器,它包含着你的应用大部分的状态(state) 。Vuex和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储时响应式的。当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  2. 你不能直接改变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++ } } })

  1. 现在,我们可以通过 store.state 来获取状态对象,以及通过store.commit 方法触发状态变更:
  2. ```vue
  3. store.commit('increment')
  4. console.log(store.state.count) // -> 1

为了在Vue组件中访问 this.$store prototype,你需要为Vue实例提供创建好的store。Vuex提供了一个从根组件向所有子组件,以store选项的方法“注入”该store的机制

  1. new Vue({
  2. el:"#app",
  3. store:store // es6 语法 store即可
  4. })
  1. 在组件里使用this.$store.state 进行访问状态。使用 this.$store.commit 来提交一个变更
  1. methods:{
  2. increment(){
  3. this.$store.commit('increment')
  4. console.log(this.$store.state.count)
  5. }
  6. }

再次强调,我们通过提交mutation的方式,而非直接改变 store.state.count

由于store中的状态是响应式的,在组件中调用store中的状态简单到仅需要在计算属性 中返回即可。
触发变化也仅仅是在组件的methods中提交mutation