vuex actions异步修改状态的实例详解


Posted in Javascript onNovember 06, 2019

actions异步修改状态与mutations同步修改状态是两个容易混淆的概念,因为两者在执行上,很难测试出两者的差别,而我们要区别它们两,首先你得区分同步与异步,我的理解是,同步更像是一条流水线作业,而异步则更像是多条,例子你比如打电话,我们通常是我打给我妈,打完之后,再跟我爸打,而异步更像是某聊天工具,你既可以跟你爸聊,又可以跟你妈聊,你跟你妈聊可以在你爸的后面,也可以在他前面,你爸也是

而actions与mutations的区别就在此,mutations是你进行用百度钱包买一件商品时,你必须先把东西购买流程走完你才能再购买另一件商品而actions是你完全可以一样在准备结算时,你可以选择其他商品,结算完其他商品再进行商品的结算,也可以一起结算。

下面我具体介绍actions写法

第一步 在你建立vuex的store.js中声明actions方法

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={//状态对象
 
count1:1,
 
 
 
},
const mutations={//触发状态
 jia(state,n){
    state.count1+=n;
  },
 jian(state){
    state.count1--;
  },
 
},
const actions={
jiaAction(context){
 
context.commit('jia',10)
/*这句话就是说,我现在store调用了同步的方法jia()*/
 
},
jianAction({commit}){
 
 
commit('jian')/*这句话就是说,我现在store调用了同步的方法jian()*/
}
 
 
}
 
 
export default new Vuex.Store({
 
 
 
state,
mutations,
getters,
actions/*这与state,mutations的操作方法是相同*/
})

第二步 在你的模板(比如a.vue)里引入你需要actions方法

1)import引入mapActions

import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'

2)在你的方法中引入 ...mapActions(['jiaAction','jianAction'])

格式一般都是固定照抄即可

代码如下:

<template>
<div>
 
<div>
 
{{count1}}
 
</div>
 
</div>
</template>
<script>
  import store from '@/store'
  import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
  export default{
    data(){
      return{
       
      }
    },
  
 methods:{
  ...mapMutations([ 
    'jia','jian'
  ]),
  ...mapActions(['jiaAction','jianAction'])
}, 
 
   computed:{
   
   
   ...mapState(["count1"]),
 
 
   },
    
    store
    
  }
</script>
 
 
 
 
 
<style scoped>
.color{
color:red;
}
 
</style>

第三步在你的组件的模板(a.vue)里引入点击事件

代码如下:

<template>
<div>
 
<div>
 
{{count1}}
 
 
</div>
<p>
 <button @click="jiaAction">+</button>
 <button @click="jianAction">-</button>
</p>
</div>
</template>

整体代码如下:

<template>
<div>
 
<div>
 
{{count1}}
 
</div>
<p>
 <button @click="jiaAction">+</button>
 <button @click="jianAction">-</button>
</p>
</div>
</template>
<script>
  import store from '@/store'
  import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
  export default{
    data(){
      return{
       
      }
    },
  
 methods:{
  ...mapMutations([ 
    'jia','jian'
  ]),
  ...mapActions(['jiaAction','jianAction'])
}, 
 
   computed:{
   
   
   ...mapState(["count1"]),
 
 
   },
    
    store
    
  }
</script>

注:现在你点击你的+或-的按钮,观察它的值与你把

<button @click="jiaAction">+</button>
 <button @click="jianAction">-</button>

换成

<button @click="jia">+</button>
 <button @click="jian">-</button>

有何不同?

没有区别说明你调试代码成功

第四步 进行异步验证

我们在我们的store.js中的jiaAction加入jiaAction方法

setTimeout(()=>{
context.commit('jian')
},3000)
console.log('我先被执行');

你再观察结果,你会发现jian这个方法在3s之后执行,你点jia依然可以在3s之内先执行,这就是异步修改状态与同步的区别。

整体代码如下:

a.vue部分

<template>
<div>
 
<div>
 
{{count1}}
 
 
</div>
<p>
 <button @click="jiaAction">+</button>
 <button @click="jianAction">-</button>
</p>
</div>
</template>

整体代码如下:

<template>
<div>
 
<div>
 
{{count1}}
 
</div>
<p>
 <button @click="jiaAction">+</button>
 <button @click="jianAction">-</button>
</p>
</div>
</template>
<script>
  import store from '@/store'
  import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
  export default{
    data(){
      return{
       
      }
    },
  
 methods:{
  ...mapMutations([ 
    'jia','jian'
  ]),
  ...mapActions(['jiaAction','jianAction'])
}, 
 
   computed:{
   
   
   ...mapState(["count1"]),
 
 
   },
    
    store
    
  }
</script>

store.js部分

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={//状态对象

count1:1,



},
const mutations={//触发状态
 jia(state,n){
    state.count1+=n;
  },
jian(state){
    state.count1--;
  },

},
const actions={
jiaAction(context){
setTimeout(()=>{
context.commit('jian')
},3000)
console.log('我先被执行');
context.commit('jia',10)
/*这句话就是说,我现在store调用了同步的方法jia()*/

},
jianAction({commit}){


commit('jian')/*这句话就是说,我现在store调用了同步的方法jian()*/
}


}


export default new Vuex.Store({



state,
mutations,
getters,
actions/*这与state,mutations的操作方法是相同*/
})

以上这篇vuex actions异步修改状态的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跨浏览器的事件对象介绍
Jun 27 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 Javascript
jQuery中slice()方法用法实例
Jan 07 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
jQuery中show与hide方法用法示例
Sep 16 Javascript
在Vue中使用echarts的实例代码(3种图)
Jul 10 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
JS查找孩子节点简单示例
Jul 25 Javascript
vue中v-model对select的绑定操作
Aug 31 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 #Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 #Javascript
vuex存值与取值的实例
Nov 06 #Javascript
node省市区三级数据性能测评实例分析
Nov 06 #Javascript
vue计算属性无法监听到数组内部变化的解决方案
Nov 06 #Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 #Javascript
vuex state中的数组变化监听实例
Nov 06 #Javascript
You might like
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
python 三元运算符使用解析
2019/09/16 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
应用服务器有那些
2012/01/19 面试题
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
大学生毕业求职简历的自我评价
2013/10/24 职场文书
幼儿园小班评语
2014/04/18 职场文书
产品生产计划书
2014/05/07 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
费用申请报告范文
2015/05/15 职场文书
家装电话营销开场白
2015/05/29 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
手残删除python之后的补救方法
2021/06/26 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
简单聊聊Golang中defer预计算参数
2022/03/25 Golang