Vuex mutitons和actions初使用详解


Posted in Javascript onMarch 04, 2019

Mutations

mutations 必须是同步函数,为什么?

举个例子:  官方案例

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

我们都知道任何回调函数中进行的状态改变都是无法追踪的,  devtools会对mutations的每一条提交做记录,记录上一次提交之前和提交之后的状态,在上面的例子中无法实现捕捉状态,因为在执行mutations时,内部回调函数还没有执行,

所以此时无法捕捉状态.

再简单来讲,就像大家都吃过核桃,核桃刚产下来的时候是带一层绿色的皮的,我们需要将绿色烧掉,弄掉了,才是我们在市场上见到的只有外面硬壳的核桃,如果我们只剥去绿皮,是不能直接吃的,因为还有一层壳胡着呢.

Actions

vuex肯定不甘示弱,为了解决mutations只有同步的问题,提出了actions(异步),专门用来解决mutations只有同步无异步的问题.

1. 首先先了解一下actions

(1).MUTATIONS

const state = {

xxx: null

},

const mutations = {


[setState](state, value) {



state.xxx = value


}

}

此处value可以是对象,可以是值等

组件调用方式: this.$store.commit('setState', [value])

(2).ACTIONS

// 第一种写法简写形式

const actions = {


[addPlus]({commit}) { // 简写方式,待研究



commit('[setState]', value)



//此处value可以是对象,可以是固定值等


}

}

// 第二种形式

const actions = {


[addPlus](context) {



//context 官方给出的指定对象, 此处context可以理解为store对象



context.commit('[setState]', value)


}

}

/* 两处的commit都是提交的mutations中的字符串的事件类型名称,对应会调用mutations中的回调函数 */

actions在组件中的调用方式: 

import mapActions from 'vuex'

methods: {


...mapActions: ([


 'addPlus' 


]),


setAddPlus () {



this.$store.dispatch('addPlus', [value]) // 异步调用mutations


}

}

Vuex 状态管理

Vuex 依赖于 Vue 用来管理 Vue 项目状态

状态的修改依赖于 commit 和 dispatch

import Vue from 'Vue';
import Vuex from 'Vuex';

export default new Vuex.Store({
  state:{
    count:100
  },
  mutations:{
    change(state,payload){
      state.count += payload;
    }
  },
  actions:{
    change(context,palyload){
      context.commit('change',palyload);// 异步触发 mutaiton
    }
  },
  getters:{
    getCount(){
      return state.count;
    }
  }
})
{{$store.state.count}}
<button @click="commitChange">更改count</button>
<button @click="dispatchChange">更改count</button>

...

methods:{
  commitChange(){
    this.$store.commit('change',1);
  },
  dispatchChange(){
    this.$sotre.dispatch('change',10);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
jquery uaMatch源代码
Feb 14 Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 Javascript
jQuery 计算iframe 窗口大小的方法
May 13 Javascript
jQuery中多个元素的Hover事件解决方案
Jun 12 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
Nov 22 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
原生JS+Canvas实现五子棋游戏实例
Jun 19 Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 Javascript
JS重学系列之聊聊new操作符
Mar 04 #Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 #jQuery
ES10 特性的完整指南小结
Mar 04 #Javascript
node.js使用express框架进行文件上传详解
Mar 03 #Javascript
微信小程序新手教程之启动页的重要性
Mar 03 #Javascript
微信小程序新手教程之页面打开数量限制
Mar 03 #Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
Mar 02 #Javascript
You might like
提升PHP速度全攻略
2006/10/09 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
如何使用python操作vmware
2019/07/27 Python
python set集合使用方法解析
2019/11/05 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
美国眼镜网:GlassesUSA
2017/09/07 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
会计自我鉴定
2013/11/02 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
班班通项目实施方案
2014/02/25 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
学雷锋日活动总结
2015/02/06 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python