Vue之Action
(1)同步与异步
在 mutation 中混合异步调用会导致你的程序很难调试。
例如,当你调用了两个包含异步回调的 mutation 来改变状态,你怎么知道什么时候回调和哪个先回调呢?
这就是为什么我们要区分这两个概念。在 Vuex 中,mutation 都是同步事务:
store.commit(event-name)
/* 任何由 "event-name" 导致的状态变更都应该在此刻完成 */
为了处理异步操作,vuex出了Action
(2)注册:定义actions动作提交mutation异变函数
目前为止,我们看到,当点击后页面上的值是改变了。我们达到了修改store中状态值的目的,但是,官方并不推荐我们这样直接去修改store里面的值,而是去提交一个actions,在actions中提交mutation再去修改状态值,接下来我们修改index.js文件,先定义actions提交mutation的函数:
【store/index.js】

(3)触发:分发 Action
Action 通过 store.dispatch 方法触发
把commit提交mutations修改为使用dispatch来提交actions,之后我们再点击页面,效果是一样的。

(4)优势---异步执行
乍一眼看上去感觉多此一举,我们直接分发 mutation 岂不更方便?实际上并非如此,还记得 mutation 必须同步执行这个限制么?Action 就不受约束!可以在 action 内部执行异步操作。
【store/index.js】---①异步注册:定义actions动作提交mutation异变函数

【.vue单文件组件】---②触发:分发异步Action

(5)载荷方式和对象方式进行分发
Actions 支持同样的载荷方式和对象方式进行分发
①载荷形式


②对象形式类似
(6)组合 Action----promise
Action 通常是异步的,那么如何知道 action 什么时候结束呢?更重要的是,我们如何才能组合多个 action,以处理更加复杂的异步流程?
首先需要明白 store.dispatch 可以处理被触发的 action 的处理函数返回的 Promise,并且 store.dispatch 仍旧返回 Promise.如果利用 async / await,也可以实现其他组合 action
一个 store.dispatch 在不同模块中可以触发多个 action 函数。在这种情况下,只有当所有触发函数完成后,返回的 Promise 才会执行。
这个之后章节再做介绍。
.
Vue之Action的更多相关文章
- vue之mapMutaions的使用 && vuex中 action 用法示例 && api.js的使用
vue之mapMutations的使用 我们通过Mutation来改变store中的state,方法往往是在子组件中使用 this.$store.commit(); 来实现,但是这样的缺点是不容易查看 ...
- vue实例讲解之vuex的使用
vuex是一个状态管理插件,本文通过一个简单的实例来讲解一下,vuex的使用. 先看一张官方的图: 这个图新手一看估计是蒙的,简单解释一下,这个图表示的就是vue通过Action Mutations ...
- Vue、SPA实现登陆
axios/qs/vue-axios安装及使用步骤 首先我们要下载三个依赖包,方便后面的开发使用需要: npm install axios -S axios是vue2提倡使用的轻量版的ajax.它 ...
- springmvc的文件上传和JWT图形验证码
相关pom依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commo ...
- SPA项目开发之tab页实现
实现思路及细节 1.利用前面博客所讲的Vuex的知识:定义几个变量 Options:存放tab页对象的容器(主要是路由路径以及tab页的名字) activeIndex:被激活的tab页路由路径 sho ...
- SPA项目开发之动态树以及数据表格和分页
首先我们来看下数据库 t_vue_user t_vue_tree_node t_vue_articles 2. 动态生成NavMenu导航菜单(只支持2级菜单) <el-menu key=&qu ...
- SPA项目开发之登录
前端 首先安装开发模板 npm install element-ui -S npm install axios -S npm install qs -S npm install vue-axios - ...
- SPA项目开发之登录注册
CMD安装所需要的pom依赖 npm install element-ui -S npm install axios -S npm install qs -S npm install vue-axio ...
- springmvc文件上传AND jwt身份验证
SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...
随机推荐
- mysql(七)查询基本语法
连接 外连接 如表-------------------------------------------------table1 | table2 |------------------------- ...
- Redis常见场景解析
一 前言 Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. 二 Redis特性 一 ...
- centos配置chrome+selenium
参考资料 https://blog.csdn.net/wkb342814892/article/details/81591394 1. 安装chrome-browser wget https://dl ...
- SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器
191213-SpringBoot 应用篇之从 0 到 1 实现一个自定义 Bean 注册器 我们知道在 spring 中可以通过@Component,@Service, @Repository 装饰 ...
- Image动画
前几课讲的静态Image挺有趣的,但是如果能有动画的效果,那就更有趣了,mPython做出动画效果也不难.用images的列表,list. 下面就是一个列表: eggs bacon tomatoes ...
- 【C++】虚函数的实现机制
一.什么是虚函数? 虚函数是在类中由virtual关键字声明的成员函数,并且每一个含有虚函数的类都至少有一个与之对应的虚函数表,其中存放着该类所有虚函数对应的函数指针 在基类中进行如下定义: virt ...
- Prometheus 配置采集目标
Prometheus 配置采集目标 1.根据配置的任务(job)以http/s周期性的收刮(scrape/pull)2.指定目标(target)上的指标(metric).目标(target)3.可以以 ...
- [Atcoder AGC029C]Lexicographic constraints
题目大意:给定$n$个字符串的长度$a_i$,问至少用几种字符可以构造出字符串$s_1\sim s_n$,满足$|s_i|=a_i$且$s_1<s_2<\cdots<s_n$. $ ...
- 服务器同时安装python2支持的py-faster-rcnn以及python3支持的keras
最近把服务器折腾一下,搞定这两个.
- MVC伪静态路由简单搭配
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute ...