简单学一下Vuex
众所周知在vue中,组件之间传递数据需要一步一步接着传递,这样写起来很麻烦,也会使代码晦涩难懂。因此,vuex诞生了!
vuex is what?
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
说白了,vuex就是一个仓库,用来存储状态(也就是数据),这些状态可以在不同组件中很方便地获取到。
vuex的使用
目录
先来看vuex的目录基本结构。先建一个store文件夹,文件夹下有两个主要的文件(夹),一个是index.js,一个是modules文件夹。

index.js:vuex的入口,用于注册
module,常规的写法通常将store分成几个模块(module),再在入口文件里统一注册
modules:每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块
1
2
3
4
5
6const moduleA = {
state: () => ({ ... }),
mutations: { ... },
actions: { ... },
getters: { ... }
}
接下来对模块的各个方法进行详细介绍
状态(state)
state可以看做组件的data,用于存储状态对象
1  | // 示例  | 
在Vue 组件中展示状态
1  | // 示例:一个 Counter 组件  | 
mapState 辅助函数
当一个组件需要获取多个状态的时候,我们一个一个写显得很不美观,这时候可以用mapState 辅助函数帮助我们生成计算属性,也显得b格比较高大上
1  | import { mapState } from 'vuex'  | 
Getter
有时候我们并不是直接想要一个数据,比如需要对列表进行过滤并计数:
1  | computed: {  | 
在多个组件中复制这个函数不是很理想,这时候就可以用到getter
就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
1  | const store = new Vuex.Store({  | 
mapGetters 辅助函数
1  | import { mapGetters } from 'vuex'  | 
Mutation
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
1  | const state = {  | 
一条重要的原则就是要记住Mutation 必须是同步函数
mapMutations 辅助函数
1  | import { mapMutations } from 'vuex'  | 
Action
Action 类似于 mutation,不同在于:
- Action 提交的是 mutation,而不是直接变更状态。
 - Action 可以包含任意异步操作。
 
1  | const state = {  | 
购物车示例,涉及到调用异步 API 和分发多重 mutation:
1  | actions: {  | 
mapActions 辅助函数
1  | import { mapActions } from 'vuex'  | 
Action 通常是异步的,那么如何知道 action 什么时候结束呢?











