34-Vuex-actions

Action 类似于 mutation,不同在于:

Action 提交的是 mutation,而不是直接变更状态(state)。
Action 可以包含任意异步操作。

在index.js中:

...
const state = {
    count:1
}
const mutations = {   //管理事件类型
    add(state){
        state.count += 1
    },
    reduce(state,step){
        state.count -= step;
        console.log(2)
    }
}
const actions = {  //提交事件,提mutations里的事件,可以在这里进行逻辑判断...操作
    add({commit}){   //简化版写法
      commit("add")  //对应mutations里边的事件名
    },
    reduce(context,step){  //完整写法
      console.log(1)
      context.commit("reduce",step)
   }
}
//当我点击➖时候,先执行actions,打印1;再执行mutations,打印2
export default new Vuex.Store({
    state,
    mutations,
    actions
})

Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.statecontext.getters 来获取 state 和 getters。当我们在之后介绍到 Modules 时,你就知道 context 对象为什么不是 store 实例本身了。

在任意组件内:

<div>{{count}}</div>
<button @click="add()">+</button>
<button @click="reduce()">-</button>

computed:mapState(["count"]),
methods:{
   reduce(){
      this.$store.dispatch("reduce",2);
   },
   add(){
       this.$store.dispatch("add")
   },
   // ...mapActions(['add','reduce'])
}

你在组件中使用 this.$store.dispatch('xxx') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用。

到此为止,上述的写法和直接使用mutations是一样效果,那为什么还需要actions呢?可以参考另一篇文章https://www.jianshu.com/writer#/notebooks/38257501/notes/51022648

image.png

组件中想要修改state的数据,通过dispatch调用actions,在acitons中通过commit调用mutations来修改数据
如果没有异步操作或者是批量处理可以直接通过commit调用mutations.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 816评论 0 3
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 3,090评论 0 7
  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 474评论 0 0
  • vuex 场景重现:一个用户在注册页面注册了手机号码,跳转到登录页面也想拿到这个手机号码,你可以通过vue的组件化...
    sunny519111阅读 8,191评论 4 111
  • Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有...
    skycolor阅读 953评论 0 1

友情链接更多精彩内容