###Vuex是什么?
global event bus 和 Vuex 的选择。
###开始
不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit) mutations。
我们通过提交 mutation 的方式,而非直接改变 store.state.count,是因为我们想要更明确地追踪到状态的变化。
由于 store 中的状态是响应式的,在组件中调用 store 中的状态简单到仅需要在计算属性中返回即可。
###核心概念
####state 和 mapState 辅助函数
#####在 Vue 组件中获得 Vuex 状态
由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态:
1 | // 创建一个 Counter 组件 |
每当 store.state.count 变化的时候, 都会重新求取计算属性,并且触发更新相关联的 DOM。然而,这种模式导致组件依赖全局状态单例。
Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)):
1 | const app = new Vue({ |
通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。
1 | const Counter = { |
#####mapState 辅助函数
使用对象展开运算符和mapState 函数,可以很方便的将多个对象合并为一个,并传给 computed 属性。
组件仍然保有局部状态
使用 Vuex 并不意味着你需要将所有的状态放入 Vuex。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。