和 Vue 一样,Vuex 暴露一个 Vuex
构造,你可以实例化一个 Vuex 实例
。一般情况下,一个应用中只需要一个 Vuex 实例。你可以把它当成一个『额外的 store』来管理应用状态。
每个 Vuex 实例由三个部分组成:
State: 一个反映应用状态的纯对象。
Mutations: 一些用于改变状态的函数。Mutations 一定是同步的。
Actions: 一些用于dispatch mutations 的函数。一个 action 可以包含异步操作,并且可以 dispatch 多个 mutations.
我们把 mutations 和 actions 分开而不是直接用函数去操作 state,原因是我们希望把 mutation 和异步操作分离。许多应用之所以复杂,正是犹豫这两者的耦合。我们解耦两者后,它们都会变得清晰和易于测试。
如果你熟悉 Flux,在这里要注意两者的一些差异:Vuex mutations 相当于 Flux 的 actions, 而 Vuex 的 actions 相当于 Flux 的 action creators.
NOTE: 我们将用 ES2015 语法写接下来的事例代码。如果你还没开始接触 ES2015,那么你应该现在就开始用! 我们还默认你已经熟悉 Building Large-Scale Apps with Vue.js 中所提到的概念。
创建一个 Vuex 实例非常简单——只需要把以上提到的三个部分放到一起:
import Vuex from 'vuex'
const vuex = new Vuex({
state: { ... },
actions: { ... },
mutations: { ... }
})
实例化后,你就能通过 vuex.state
访问 state, 通过 vuex.actions
访问 actions。你不能直接访问 mutation functions——你只能通过 actions 或执行 vuex.disptach()
访问。接下来我们会更详细地讨论这几个概念。