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

作者:周行知 时间:2024-05-10 14:12:50 

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的操作方法是相同*/
})

来源:https://blog.csdn.net/baidu_36681154/article/details/79208463

标签:vuex,actions,异步,状态
0
投稿

猜你喜欢

  • django表单中的按钮获取数据的实例分析

    2021-05-17 04:38:04
  • Python中让MySQL查询结果返回字典类型的方法

    2024-01-25 04:37:33
  • 在Golang代码中如何自动生成版本号的方法示例

    2023-10-14 23:25:36
  • Vue生命周期示例详解

    2024-04-28 09:25:46
  • 实例介绍Python中整型

    2021-03-09 08:00:33
  • php获取客户端IP及URL的方法示例

    2024-05-03 15:49:01
  • 发一个较复杂的字符串截取函数

    2009-12-08 16:23:00
  • python递归全排列实现方法

    2021-11-17 15:16:04
  • Python中Collection的使用小技巧

    2022-04-14 01:42:57
  • python实现网站的模拟登录

    2022-09-25 23:33:56
  • 深入了解Python枚举类型的相关知识

    2022-08-02 06:15:40
  • Python使用LRU缓存策略进行缓存的方法步骤

    2023-09-03 05:00:06
  • Django展示可视化图表的多种方式

    2022-07-31 07:15:53
  • 举例讲解Python程序与系统shell交互的方式

    2021-10-29 14:43:17
  • Python读取二进制文件代码方法解析

    2023-06-14 14:32:35
  • HTML标签tbody的用法

    2009-11-02 10:11:00
  • 美图秀秀web开放平台--PHP流式上传和表单上传示例分享

    2023-11-15 08:34:42
  • 在https页面中使用iframe出现安全警告的解决方法

    2009-03-04 12:01:00
  • Python中的exec、eval使用实例

    2022-07-05 21:01:41
  • Flask框架运用WTForms实现用户注册的示例详解

    2021-07-31 06:50:12
  • asp之家 网络编程 m.aspxhome.com