目录vue
在前面总结过组件间通讯的几种方式,都有相应的适用的场景。在大型项目中,当组件树层级愈来愈多,组件间的通讯也就愈来愈麻烦和复杂,特别当多个组件依赖于某些共同的数据,或者不一样的组件须要能变动某一个数据时,还要保持状态的响应式的情形下,咱们不得不考虑采起一种更好的方式去组织代码。vuex
所以,咱们考虑把组件全部共享的数据抽取出来,以一个全局单例的模式统一管理,咱们要实现,在这种组织方式下,无论组件树的哪一个节点,都能获取数据或者改变数据,而且依赖此数据的其它组件也能即时获取改变后最新的数据。把这些组件依赖的数据做为状态量进行统一管理,这就是状态管理。app
在状态管理中,咱们须要定义一些统一的概念和约定一些强制性的规则来方便管理,以此实现状态的改变可被追踪和可被预测。异步
这就是vuex
产生的背后思想,它是专门为vue
设计的状态管理库,充分复用了vue
的数据响应机制来使得状态的改变也是响应式的。多个依赖于同一状态的组件,其中任何一个组件改变了某个依赖状态,其它组件也会也会相应地获得高效的更新。测试
在vuex
中,咱们定义了以下几个概念和约定规则:this
// 1. 引入vue 和 vuex import Vue from 'vue' import Vuex from 'vuex' // 2. 在vue中注册vuex插件 Vue.use(Vuex) // 3. 实例化一个管理状态的仓库store const store = new Vuex.Store({ state:{}, getters: {}, mutations: {}, actions: {}, modules: {} }) // 4. 将store 全局注入到vue实例 const app = new Vue({ el: "#app", // 把 store 对象提供给 “store” 选项,这样就能够把 store 的实例注入全部的子组件 store, // 其它代码... }) // 5. 组件中使用 this.$store const Counter = { template: `<div>{{ count }}</div>`, computed: { count () { return this.$store.state.count } } }
总结下约定的规则,简单的说就是:commit mutation,dispatch action
spa