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 相关文章推荐
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
javascript跨域刷新实现代码
Jan 01 Javascript
利用JS实现浏览器的title闪烁
Jul 08 Javascript
js中跨域方法原理详解
Jul 19 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
angular2使用简单介绍
Mar 01 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
Jun 13 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
基于JavaScript实现省市联动效果
Jun 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与Java对比学习日期时间函数
2016/07/03 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
css3实现动画的三种方式
2020/08/24 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
土木工程专业个人求职信
2013/12/30 职场文书
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
党员一句话承诺大全
2014/03/28 职场文书
钳工实训报告总结
2014/11/04 职场文书
班主任高考寄语
2015/02/26 职场文书
辞职信怎么写
2015/02/27 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
我的长征观后感
2015/06/09 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
python引入其他文件夹下的py文件具体方法
2021/05/23 Python