vuex 之既生‘mutation’何生‘action’

vuex 中,action 及 mutation 均为操作数据的作用而存在,既然二者均可改变数据,为什么要分成两个方法来处理呢,因为:

Mutation 必须是同步函数

mutations: {
  someMutation (state) {
    api.callAsyncMethod(() => {
      state.count++
    })
  }
}

现在想象,我们正在 debug 一个 app 并且观察 devtool 中的 mutation 日志。每一条 mutation 被记录,devtools 都需要捕捉到前一状态和后一状态的快照。然而,在上面的例子中 mutation 中的异步函数中的回调让这不可能完成:因为当 mutation 触发的时候,回调函数还没有被调用,devtools 不知道什么时候回调函数实际上被调用——实质上任何在回调函数中进行的状态的改变都是不可追踪的。

在 mutation 中混合异步调用会导致你的程序很难调试。例如,当你调用了两个包含异步回调的 mutation 来改变状态,你怎么知道什么时候回调和哪个先回调呢?这就是为什么我们要区分这两个概念。在 Vuex 中,mutation 都是同步事务:

store.commit(‘increment‘)
// 任何由 "increment" 导致的状态变更都应该在此刻完成。

那么,参与异步操作的责任就落到了 action 的身上。

Action 类似于 mutation,不同在于:

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

原文地址:https://www.cnblogs.com/momo798/p/12050177.html

时间: 2024-10-09 01:29:51

vuex 之既生‘mutation’何生‘action’的相关文章

君生我未生,我生君已老

<君生我未生,我生君已老> 君生我未生,我生君已老. 君恨我生迟,我恨君生早. 君生我未生,我生君已老. 恨不生同时,日日与君好. 我生君未生,君生我已老. 我离君天涯,君隔我海角. 我生君未生,君生我已老. 化蝶去寻花,夜夜栖芳草.  

君生我未生,我生君已老。恨不生同时,日日与君好

我是一个孤儿,也许是重男轻女的结果,也许是男欢女爱又不能负责的产物.   是哲野把我拣回家的.   那年他落实政策自农村回城,在车站的**堆边看见了我,一个漂亮的,安静的小女婴,许多人围着,他上前,那女婴对他璨然一笑.   他给了我一个家,还给了我一个美丽的名字,陶夭.后来他说,我当初那一笑,称得起桃之夭夭,灼灼其华.   哲野的一生极其悲凄,他的父母都是归国的学者,却没有逃过那场文化浩劫,愤懑中双双弃世,哲野自然也不能幸免,发配农村,和相恋多年的女友劳燕分飞.他从此孑然一身,直到35岁回城时拣

《CLR via C#》精髓:既生dynamic何生var?

对于使用var关键字声明局部变量,编译器将根据表达式来推断变量的最终的数据类型: 通过dynamic表达式或变量调用成员(字段.属性.方法委托等)时,编译器将生成特殊IL代码,这些代码被称为Payload代码.在运行时,Payload代码将根据dynamic表达式或变量所引用对象的确切类型来决定最终要执行的操作: var关键字只能用于声明方法内的局部变量,而dynamic关键字则可以用于局部变量.字段和参数: 你无法将一个表达式转型为var,但你可以将一个表达式转型为dynamic: 你必须显式

关于 vuex 报错 Do not mutate vuex store state outside mutation handlers.

10 :问题描述 在使用vuex 时,有时候 我们在mutation中定义好方法,在页面或组件提交时 有可能经常会遇到这个错误:---->>Do not mutate vuex store state outside mutation handlers. 9. 原因: The reason is that arrays are stored as references in Javascript and payload.items is likely to be changed outside

皇家利华开户156+8793+1777君生我未生 我生君已老

我是一个孤儿,也许是重男轻女的结果,也许是男欢女爱又不能负责的产物. 是哲野把我拣回家的. 那年他落实政策自农村回城,在车站的垃圾堆边看见了我,一个漂亮的,安静的小女婴,许多人围着,他上前,那女婴对他璨然一笑. 他给了我一个家,还给了我一个美丽的名字,陶夭.后来他说,我当初那一笑,称得起桃之夭夭,灼灼其华. 哲野的一生极其悲凄,他的父母都是归国的学者,却没有逃过那场文化浩劫,愤懑中双双弃世,哲野自然也不能幸免,发配农村,和相恋多年的女友劳燕分飞.他从此孑然一身,直到35岁回城时拣到我. 我管哲野

生女孩继续生,直到男孩,100年后

题目: 在一个重男轻女的国家里,每个家庭都想生男孩,如果他们生的是女孩,就再生一个,直到生在的是男孩为止.100年后,这个国家的男女比例是多少? 思路一:穷举法 假设一年一生 第一年:男:1/2     女:1/2 第二年:男:1/2+(1/2)^2   女:1/2+(1/2)^2 第三年:男:1/2+(1/2)^2+(1/2)^3   女:1/2+(1/2)^2+(1/2)^3 ....... 所以一群人生出来的男女比例为1 思路二: 直接分析,针对新增人口,由于每次新增男女比都一样,那么可以

基于java的学生成绩系统 关于普通生、留级生、特长生的研究与实现【原创】

文章结尾有彩蛋 研究的题目为: JAVA 学生成绩系统 求符合下列要求的代码某学校有三类学生:1)普通生,总评成绩由平时成绩30%和考试成绩70%组成2)留级生:总评成绩完全由考试成绩组成3)特长生:总评成绩由平时成绩30%+考试成绩70%+10分附加分组成每个学生都有姓名和学号.要求:一.正确定义类表示上述三类学生及其关系.二.正确定义各个类的方法,求每个学生的总评成绩三.定义方法,求N个学生的总评成绩平均分四.定义方法,求N个学生中的总评成绩最高者五.定义方法,输入N个学生的信息和成绩,并存

既生瑜何生亮?ASP.NET MVC VS ASP.NET Web API

Asp.net MVC 与 Asp.net Web API 区别 在我们开发一些web应用时,我们一样可以在MVC Framework 中使用JsonResult 来返回JSON数据,同样也可以处理一下简单的AJAX请求,那么为何微软又推出Web API这么个东西呢?接下来我们来比较一下.二者(Asp.net MVC 与 Asp.net Web Api)何时用? Asp.Net Web API VS Asp.Net MVC 1.Asp.net MVC 是用来创建返回视图(Views)与数据的We

VUEX报错 [vuex] Do not mutate vuex store state outside mutation handlers

数组 错误的写法:let listData= state.playList; // 数组深拷贝,VUEX就报错 正确的写法:let listDate= state.playList.slice(); /*不能直接操作state里面的属性,但是可以创建一个副本*/ 对象 错误的写法:let listData= state.playList; // 对象深拷贝,VUEX就报错 正确的写法:let listDate= Object.assign({}, state.playList); /*不能直接操