vuex 中 actions 与 mutations 的区别,以及如何触发

vuex 模块化中,我们通常会定义 state,mutations,actions  等,state 中定义一些数据,通常是全局状态管理的数据;mutations 也是一个对象,这个对象里面可以存放改变state 的初始值的方法,且为同步操作;actions 是异步操作,通常我们可以调用接口信息。

一、异步操作 actions

首先我们来说下,vue 组件中如何调用 actions 中的方法?

方案一:使用 mapActions

import { mapActions } from 'vuex'
methods: {
  ...mapActions(['Login']),

  async handleSubmit (e) {
    await this.Login(this.form)
  }
}

方案二:使用 dispatch 触发

// Login 为 actions 中的异步函数,this.form 为参数
this.$store.dispatch('Login', this.form)

我们在模块的 action 中,异步接口请求获取到数据,然后使用同步操作的方式去修改数据的初始值。

// src/store/modules/user.js 
import api from '@/http/api/user'
const user = {  
  actions: {
    async Login ({ commit }, userInfo) {
      try {
        ......
        const { tokenInfo } = resp.data
        // token
        commit('setToken', tokenInfo.token)
      } catch (e) {
        throw e
      }
    }
  }
}
export default user

二、同步操作 mutations

那我们如何进行同步修改数据的呢?commit,使用 commit 提交 mutation,从而进行同步操作。

import api from '@/http/api/user'
const user = {  
  mutations: {
    setToken: (state, token) => {
      state.token = token
    },
  },
}
export default user

同样提交至 mutation 也有两种方案。

方案一:使用 mapMutations

import { mapMutations } from 'vuex'
methods: {
  ...mapMutations([
    'setLoginVisible',
  ]),
  // 登录点击事件
  toLogin () {
    this.setLoginVisible(true)
  },
}

方案二:使用 commit

// setLoginVisible 为 mutations 中的同步函数,true 为参数
this.$store.commit('setLoginVisible', true)

在模块的 mutations 中,修改数据如下:

import api from '@/http/api/user'
const user = {  
  mutations: {
    setLoginVisible: (state, loginVisible) => {
      state.loginVisible = loginVisible
    },
  },
}
export default user

总结:actions 可以进行异步操作,可用于向后台提交数据或者接受后台的数据;mutations 中是同步操作,用于将数据信息写在全局数据状态中缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值