vuex- action
 
1、当点发送过快,页面中渲染的内容与state中的数据不一致,vuex里面的state变得慢,且不持续更新
2、action中是可以做到页面中state中数据保持一致
责编:menVScode 2017-12-16 22:39 阅读(970)

如果点击按钮不是直接改变store中的状态,而是完成其他操作后再来改变,这时候会出现一个问题。

/store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let store = new Vuex.Store({
state:{ //应用中需要的状态数据
count:100
},
mutations:{//不能直接改变state中的状态,唯一途径显示的提交mutations
addNum(state,n){
setTimeout(()=>{ //模拟异步操作
state.count +=n
},1000)
},
minusNum(state,payload){
state.count -= payload.min
}
}
})
export default store

初始化状态

慢慢点击+按钮,观察页面中的数字和控制台中的数字。

快速点击+按钮,观察页面中的数字和控制台中的数字。

两个不同点击方式有一个共同的现象:页面中数字跟控制台数字没有统一。当点击一下+按钮就通过 mutation 改变状态,在vuex中有一个原则:在提交mutation的时候必须是同步的。

当一提交mutation,控制台Base State中必定有一条记录,不做异步操作。但是要包含异步操作的话,需要使用 action。

Action:包含异步操作、提交mutation改变状态。

修改后/store/index.js

在actions中通过 context.commit('addNum',{}) 来提交mutation

import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) let store = new Vuex.Store({
state:{ //应用中需要的状态数据
count:100
},
mutations:{//不能直接改变state中的状态,唯一途径显示的提交mutations
addNum(state,payload){
state.count +=payload.n
},
minusNum(state,payload){
state.count -= payload.min
}
},
actions:{
addAction(context){//参数:对象,不是当前的store实例
setTimeout(()=>{ //模拟异步操作
//改变状态,必须提交mutation
context.commit('addNum',{n:3})
},1000)
}
}
}) export default store

修改后 /src/components/Increment.vue

通过 this.$store.dispatch('addAction') 来触发一个action

<template>
<div>
<h2>加减</h2>
<button @click="addHandle">+</button>
<span>{{num}}</span>
<button @click="minusHandle">-</button>
</div>
</template>
<script>
export default{
computed:{
num(){
return this.$store.state.count
}
},
methods:{
addHandle(){
//改变状态,只需提交mutation中的addNum
//this.$store.commit('addNum',3) //触发一个action
this.$store.dispatch('addAction')
},
minusHandle(){
this.$store.commit({
type:'minusNum',
min:5
})
}
}
}
</script>

与本文action相关的文章(必看):http://menvscode.com/detail/5a353b05a7833e528ca883de

  • 喜欢 (0)
  • 收藏 (0)
标签: action vuex
分享:0
前端交流群: 
原创声明: 本文属于原创文章,转载请注明出处--http://www.menvscode.com/detail/5a353031a7833e528ca883dd
 
登录
 
 
 
 
 
还没有评论,快来抢沙发吧!
 
 
 

畅言正式推出商业版包月/包年VIP服务,评论流弹窗位置全站去广告,一对一专业技术支持,一对一重点客户服务,现在就加入我们的VIP大家庭吧!

 
 
 
 
立刻说两句吧!
 
 

本站在建设中引用了因特网上的一些资源并对有明确来源的注明了出处,版权归原作者及网站所有;
如果您对本站文章版权的归属存有异议,请您联系站长:third_king$163.com(将$换成@),我们会马上做出整改。

Copyright © menvscode.com All Rights Reserved.   浙ICP备16010139号-3

mutation与vuex区别的更多相关文章

  1. vuex知识笔记,及与localStorage和sessionStorage的区别

    菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...

  2. vuex 基本入门和使用(三)-关于 mutation

    vuex 基本入门和使用(三)-关于 mutation vuex 版本为^2.3.1,按照我自己的理解来整理vuex. 关于 mutation 这里应该很好理解. 更改 Vuex 的 store 中的 ...

  3. Vuex之Mutation

    [前言] 数据在页面是获取到了,但是如果需要修改count值怎么办?更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 ...

  4. [Vuex系列] - Mutation的具体用法

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...

  5. 挑战全网最幽默的Vuex系列教程:第三讲 Vuex旗下的Mutation

    写在前面 上一讲「Vuex 旗下的 State 和 Getter」,告诉了我们怎么去使用仓库 store 中的状态数据.当然,光会用肯定还不够,大部分的应用场景还得对这些状态进行操控,那么具体如何操控 ...

  6. 初识vuex

    1.简介 vuex是 vue官方推荐的一个状态管理器.当我们遇到很多状态改变时,组件之间的通信就会变得复杂,这时候vuex的强大就展现出来. 我们从vuex的原理以及vuex的api两个部分介绍vue ...

  7. Vue-认识状态管理vuex

    vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试,可以多个组件共享状态.简单来说,就是共享的状态用state来存放,用mutations来操作state,但是 ...

  8. vuex - 学习日记

    一.简单理解 简单说vuex,就是用来管理组件状态的数据,并且能在你可掌控的范围下增删改查这些数据. store容器 , state状态 二者关系(包含): 以前我也把vuex里边的state看成是一 ...

  9. day 87 Vue学习六之axios、vuex、脚手架中组件传值

      本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的使用 Axios 是一个基于 promise 的 HT ...

随机推荐

  1. POJ-2828 Buy Tickets---线段树+逆序

    题目链接: https://cn.vjudge.net/problem/POJ-2828 题目大意: 插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后 ...

  2. 使用pako.js实现gzip的压缩和解压

    poko.js可至Github下载:https://github.com/nodeca/pako 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  3. SSH Secure Shell Client连接Linux断开

    修改/etc/ssh/sshd_config文件,将 ClientAliveInterval 0和ClientAliveCountMax 3的注释符号去掉,将ClientAliveInterval对应 ...

  4. json 二进制传输方案

    json 传输二进制数组方案 json 是一种很简洁的协议,但可惜的是,它只能传递基本的数型(int,long,string等),但不能传递byte类型.如果想要传输图片等二进制文件的话,是没办法直接 ...

  5. Unity 游戏框架搭建 (九) 减少加班利器-QConsole

    为毛要实现这个工具? 在我小时候,每当游戏在真机运行时,我们看到的日志是这样的. 没高亮啊,还有乱七八糟的堆栈信息,好干扰日志查看,好影响心情. 还有就是必须始终连着usb线啊,我想要想躺着测试... ...

  6. 使用缓存时出现java.io.NotSerializableException:xxx.xxx.xxx.Bean解决办法

    解决方案:   开发过程中如果想缓存某个JavaBean,请确保它所引用的对象都implents Serializable,如果某个对象不需要被cache,可以加上transient关键字,否则Ehc ...

  7. 2018 Wannafly summer camp Day2--New Game!

    New Game! 描述 题目描述: Eagle Jump公司正在开发一款新的游戏.泷本一二三作为其员工,获得了提前试玩的机会.现在她正在试图通过一个迷宫. 这个迷宫有一些特点.为了方便描述,我们对这 ...

  8. POJ 1410--Intersection(判断线段和矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16322   Accepted: 4213 Des ...

  9. string类中字符的大小写转换

    今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换 ...

  10. 2 3 5 7的倍数 (51Nod - 1284)[容斥定理]

    20180604 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N <= 10^1 ...