Vuex的使用

275 阅读1分钟

前言

Vuex是专门为vue开发的状态管理模式,为应用中的组件提供集中式的管理与存储,将相同的状态抽离出来,方便多组件共享状态

Store

export default new Vuex.Store({
    state,
    mutations,
    actions
})

Vuex的核心是Store,是仓库的意思,类似一个容器包含大部分的状态,它的状态存储是响应的,即当Store中的状态发生改变,相应的组件内容也会发生更新,唯一改变状态的方式是显示的提交mutation。

State

const state ={
    count: 1,
    list:[]
}

购物数量{{$store.state.count}}
<button type="button" name="button" @click="increment">增加</button>
<button type="button" name="button" @click="decrement">删减</button>

state定义了数据的数据结构并设置初始化状态,在组件中可通过$store.state.count来获得

Mutation

Vue.use(Vuex)

const state ={
    count: 1,
    list:[]
}

const mutations={
    increment(state,param){
        window.console.log(param)
        state.count+=param
    },
    //接收从组件传过来的参数
    decrement(state){
        state.count--
    }
}
...

使用mutation,是唯一更新应用状态的地方
mutation类似于事件:每一个mutation都有一个字符串类型的type(事件类型)和handler(回调函数,而这个函数就是我们实际进行状态更改的地方,并且会接收state作为其第一个参数),修改状态
mutation必须是同步函数

Action

// 在组件中分发action,可以使用this.$store.dispatch或者使用辅助函数mapActions
  methods: mapActions([
        'increment',// -> 这里映射为 this.$store.dispatch('increment');
        'decrement'// -> 这里映射为 this.$store.dispatch('decrement');
    ]),

Vue.use(Vuex)
    
const state ={
    count: 1,
    list:[]
}

const mutations={
    increment(state,param){
        window.console.log(param)
        state.count+=param
    },
    //接收从组件传过来的参数
    decrement(state){
        state.count--
    }
}

const actions ={
    increment:({commit},param)=>{
        commit('increment',param)
        //提交mutation
    },,
    decrement:({commit})=>{
        commit('decrement')
    }
}

export default new Vuex.Store({
    state,
    mutations,
    actions
})

Action提交的是mutation,而不是直接变更状态

Action支持任意的异步操作(异步请求数据)

Module

import money from './modules/a'
import count from './modules/b'


Vue.use(Vuex)
export default new Vuex.Store({
    modules:{
        money,
        count
    }
})

Vuex允许我们将store分割成模块,每个模块拥有自己的state,mutation,action,getter等,按导出名使用