Vuex是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的全部组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vue
state: 驱动应用的数据源
view: 以声明方式将state映射到视图
actions: 响应在view上的用户输入致使的状态变化
npm install vuex --save or yarn add vuex
每个 Vuex
应用的核心就是 store
(仓库)。 "store"
基本上就是一个容器,它包含着你的应用中大部分的状态 (state)
。 Vuex
和单纯的全局对象有如下两点不一样:vuex
Vuex
的状态存储是响应式的。当Vue
组件从store
中读取状态的时候,若 store
中的状态发生变化,那么相应的组件也会相应地获得高效更新。store
中的状态。改变 store
中的状态的惟一途径就是显式地提交(commit) mutations
。这样使得咱们能够方便地跟踪每个状态的变化,从而让咱们可以实现一些工具帮助咱们更好地了解咱们的应用。在src下建立Vuex文件夹, 在文件夹中建立store.js 导入并注册npm
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex)
在main.js 中要进行引入app
import store from './vuex/store' new Vue({ el: '#app', router, // 把 store 对象提供给 "store" 选项,这能够把 store 的实例注入全部的子组件 store, template: '<App/>', components: { App } })
在store文件中建立并导出异步
export default new Vuex.Store ({ // 保存初始状态的地方 state: { count: 0 }, // 定义方法改变状态的地方 mutations : { // state 状态 num 传进来的参数 increment:(state, num) =>{ console.log(state) state.count = num } } })
this.$store.state.count // 能够在计算属性computed调用 computed: { src() { return this.$store.state.count } },
this.$store.commit('increment', 10) // 以载荷形式分发 this.$store.commit({ type: 'increment', amount: 10 }) // 以对象形式分发 this.$store.commit('increment', { amount: 10 })
Action
相似于mutation
,不一样在于:函数
Action
提交的是mutation
,而不是直接变动状态。工具
Action
能够包含任意异步操做。this
// 异步操做 actions: { increments (context, num) { context.commit('increment', num) } }
Action
函数接受一个与 store
实例具备相同方法和属性的 context
对象,所以你能够调用 context.commit
提交一个 mutation
,或者经过 context.state
和 context.getters
来获取 state
和 getters
。spa
this.$store.dispatch('increments', 50)
因为使用单一状态树,应用的全部状态会集中到一个比较大的对象。当应用变得很是复杂时,store 对象就有可能变得至关臃肿。
为了解决以上问题,Vuex 容许咱们将 store 分割成模块(module)。每一个模块拥有本身的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行一样方式的分割:
const moduleA = { state: { ... }, mutations: { ... }, actions: { ... }, getters: { ... } } const moduleB = { state: { ... }, mutations: { ... }, actions: { ... } } const store = new Vuex.Store({ modules: { a: moduleA, b: moduleB } }) store.state.a // -> moduleA 的状态 store.state.b // -> moduleB 的状态