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 相关文章推荐
js中prototype用法详细介绍
Nov 14 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
js本地图片预览实现代码
Oct 09 Javascript
关于页面刷新vuex数据消失问题解决方案
Jul 03 Javascript
Vuex的实战使用详解
Oct 31 Javascript
vue路由拦截器和请求拦截器知识点总结
Nov 08 Javascript
JavaScript实现轮播图效果
Oct 30 Javascript
vue 获取url里参数的两种方法小结
Nov 12 Javascript
JavaScript执行机制详细介绍
Dec 06 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入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
js实现放大镜特效
2017/05/18 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python3 Random模块代码详解
2017/12/04 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
西安众合通用.net笔试题
2013/03/18 面试题
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年居委会工作总结
2014/12/09 职场文书
前台接待岗位职责
2015/02/03 职场文书
六一儿童节主持开场白
2015/05/28 职场文书