- 
    
state
- state是vuex的唯一数据源,是所有组件的公共data
 - 
        
…mapState辅助函数
- 如果需要获取多个state,可使用…mapState辅助函数
 - 因为一般是用this.$store.state.xxx来获取某个属性,所以这种就是为了获取多个state属性,然后直接拿来用
 
 
 - 
    
getters
- getters用于从state中派生出一些状态,例如对列表进行过滤等。可以将getters理解为计算属性computed,getter的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
 - getters接受state作为其第一个参数
 - 得到getter处理后的值this.$store.getters.Fuc
 - 如果需要使用多个getters,可使用…mapGetters辅助函数
 
 - 
    
mutation
- 更改vuex的store中的状态的唯一方法是提交mutation。
 - vuex中的mutation类似于事件:每个mutation都有一个字符串的事件类型和一个回调函数。这个回调函数就是我们实际进行状态更改的地方,并且它会接受state作为第一个参数(payload为第二个参数,也就是自定义参数)。
 
 
    //在此我们给store添加一个mutation属性reducePrice,用于将商品价格减少payload
    // store.js
    mutations: {
        reducePrice: (state, payload) => {
            return state.productList.forEach((product) => {
                product.price -= payload;
            })
        }
    }
- 组件里的调用
    
methods: { reducePrice(){ //之前也见过把这句话封装在action里的写法,chartFun this.$store.commit('reducePrice', 4) } } - 
    
辅助函数…mapMutations
- 注意这个放在method里 ``` //eg methons: { …mapMutations([ ‘reducePrice’ ]) }
 
```
action
 - action类似于mutation,不同之处在于:
    
- action提交的是mutation,而不是直接变更状态。
 - action可以包含异步操作,而mutation不行。
 - actions中的回调函数的第一个参数是context, 是一个与store实例具有相同属性和方法的对象.
 - 
        
action通过store.dispatch方法触发,mutation通过store.commit方法提交。
 
 
    // store.js
    actions: {   // 提交的是mutation,可以包含异步操作
        reducePriceAsync: (context, payload) => {
            setTimeout(()=> {
                context.commit('reducePrice', payload);  // reducePrice为上一步mutation中的属性
            },2000)
        }
    }
 //组件中调用
    methods: {
        reducePriceAsync(){
                this.$store.dispatch('reducePriceAsync', 2)
        },
    }
  
moudle 是在大型项目中将vuex分成模块
参考:https://www.jianshu.com/p/01a20b256287