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 相关文章推荐
javascript 选择文件夹对话框(web)
Jul 07 Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
使用JS+plupload直接批量上传图片到又拍云
Dec 01 Javascript
TypeScript 中接口详解
Jun 19 Javascript
使用javascript提交form表单方法汇总
Jun 25 Javascript
解决JS请求服务器gbk文件乱码的问题
Oct 16 Javascript
盘点javascript 正则表达式中 中括号的【坑】
Mar 16 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
vue仿淘宝订单状态的tab切换效果
Jun 23 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 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
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
基于vuex实现购物车功能
2021/01/10 Vue.js
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python异常处理操作实例详解
2018/05/10 Python
wxPython的安装与使用教程
2018/08/31 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
学习型党组织心得体会
2014/09/12 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers