mutation、action的区别

93 阅读1分钟

mutations在数据请求的时候是同步的,actions是异步的

action的功能和mutation是类似的,都是去变更store里的state,下面有两点不同:

  • action主要处理的是异步的操作,mutation必须是同步执行,action可以是同步也可以是异步
  • action改变状态,最后通过提交mutation

mutation

this.$store.commit('mutation函数名',发送到mutation中的数据); // 改变store中状态的唯一方法是提交mutation

action

this.$store.dispatch('action中的函数名',发送到action中的数据); // 不是突变直接操作state值,而是commit mutation之后由mutation操作state

const store = new Vuex.Store({
    state: {
        userInfo: {},
        accountInfo: {},
    },
    mutations: {
        _userInfo(state,data){
            console.log(data);
            state.userInfo = data;
        },
        _accountInfo(state,data){
            console.log(data);
            state.accountInfo = data;
        },
    },
    actions: {
        upDate({commit,state}){
            return api.get('user/${state.userInfo.userId}/userInfo',{}).then(res=>{
                commit('_userInfo',res.user);
                commit('_accountInfo',res.account);
                return 0;
            })
        }
    }
})