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 相关文章推荐
Node.js操作Firebird数据库教程
Mar 04 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
js实现4个方向滚动的球
Mar 06 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 Javascript
JS字符串去除连续或全部重复字符的实例
Mar 08 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
Element Input组件分析小结
Oct 11 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
Prototype Selector对象学习
2009/07/23 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
VUE实现日历组件功能
2017/03/13 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
python 函数中的参数类型
2020/02/11 Python
Python super()函数使用及多重继承
2020/05/06 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
python 爬虫请求模块requests详解
2020/12/04 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
单位推荐信范文
2015/03/27 职场文书
销售开票员岗位职责
2015/04/15 职场文书
python热力图实现的完整实例
2022/06/25 Python