Vuex之理解mutation的用法

2023-11-17

一.什么是mutation

通俗的理解mutations,里面装着一些改变数据方法的集合,这是Veux设计很重要的一点,就是把处理数据逻辑方法全部放在mutations里面,使得数据和视图分离。切记:Vuex中store数据改变的唯一方法就是mutation!

二.怎么用mutations?

1.mutation结构

每一个mutation都有一个字符串类型的事件类型(type)和回调函数(handler),也可以理解为{type:handler()},这和订阅发布有点类似。先注册事件,当触发响应类型的时候调用handker(),调用type的时候需要用到store.commit方法。

//store.js
const store = new Vuex.Store({
	state: {
		count: 1
	},
	mutations: {
 //注册时间,type:increment,handler第一个参数是state;
		increment (state) { 
			// 变更状态
			state.count++
		}
	}
})
//页面上触发
<template>
    <button @click="increment">+</button>
</template>

<script>
export default {
	methods:{
		increment(){
		//调用type,触发handler(state) 
		  	this.$store.commit('increment');
		}
	}
}
</script>

2.提交载荷(Payload)

简单的理解就是往handler(state)中传参handler(state,pryload);一般是个对象。

mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
store.commit('increment', {
  amount: 10
})

3.commit

提交可以在组件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store)。

<template>
    <div>
		<h4>测试1:Count is {{count}}</h4>
        <button @click="increment">+</button>
        <button @click="decrement">-</button>
    </div>
</template>
<script>
export default {
	computed:{
		count(){
		    return this.$store.state.count
		}
	},
	methods:{
		increment(){
		//通过 store.commit 方法触发状态变更(mutation的方法) 
		  	this.$store.commit('increment');
		},
		decrement(){
		  	this.$store.commit('decrement');
		}
	}
}
</script>

//改成mapMutations  效果是一样
<script>
import { mapMutations } from 'vuex'
export default {
	computed:{
		count(){
		    return this.$store.state.count
		}
	},
	methods:{
		...mapMutations([
			'increment',
			'decrement'
		])
	}
}
</script>

4.使用常量替代 Mutation 事件类型

使用常量替代 mutation 事件类型在各种 Flux 实现中是很常见的模式。这样可以使 linter 之类的工具发挥作用,同时把这些常量放在单独的文件中可以让你的代码合作者对整个 app 包含的 mutation 一目了然:

//1.vueDome
<template>
    <div>
		<h4>测试1:Count is {{count}}</h4>
        <button @click="SOME_INCREMENT">+</button>
        <button @click="SOME_DECREMENT">-</button>
    </div>
</template>
<script>
export default {
	computed:{
		count(){
		    return this.$store.state.count
		}
	},
	methods:{
		SOME_INCREMENT(){
		//通过 store.commit 方法触发状态变更(mutation的方法) 
		  	this.$store.commit('SOME_INCREMENT');
		},
		SOME_DECREMENT(){
		  	this.$store.commit('SOME_DECREMENT');
		}
	}
}
</script>


//2. mutation-types.js
//使用常量替代 Mutation 事件类型

export const SOME_MUTATION = 'SOME_INCREMENT'
export const SOME_DECREMENT = 'SOME_DECREMENT'

//3.store.js 入口文件vuex
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

// 引入actions, mutations, getters
import actions from "./actions.js"
import mutations from "./mutations.js"
import getters from "./getters.js"

const state = {
	// 应用启动时, count置为0
	count:0
}
export default new Vuex.Store({
	state,
	getters,
	actions,
	mutations
})

// 4.mutations.js
import { SOME_INCREMENT } from './mutation-types'
import { SOME_DECREMENT } from './mutation-types'
export default {
	//使用ES6的箭头函数来给count增值
	SOME_INCREMENT:state => state.count ++,
	SOME_DECREMENT:state => state.count --,
}
5.Mutation 必须是同步函数
一条重要的原则就是要记住 mutation 必须是同步函数。为什么?请参考下面的例子:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vuex之理解mutation的用法 的相关文章

随机推荐

  • Jmeter —— 常用的几种断言方法(基本用法)

    在使用JMeter进行性能测试或者接口自动化测试工作中 经常会用到的一个功能 就是断言 断言相当于检查点 它是用来判断系统返回的响应结果是否正确 以此帮我们判断测试是否通过 本文 主要介绍几种常用的断言 响应断言 JSON断言 BeanSh
  • WPS AI(海外版)使用体验分享

    最近很幸运的通过了WPS AI海外版的内测waitlist 这里和大家分享一下使用的体验和评价 申请与安装 WPS AI分为国内版和海外版两种 其中根据WPS自己的介绍 国内版本的模型由MinMax公司提供 海外版则是直接使用OpenAI的
  • OpenCV检测角点

    harris角点检测算法步骤 1 利用Soble计算出XY方向的梯度值 2 计算出Ix 2 Iy 2 Ix Iy 3 利用高斯函数对Ix 2 Iy 2 Ix Iy进行滤波 4 计算局部特征结果矩阵M的特征值和响应函数C i j Det M
  • Win7下U盘安装Ubuntu14.04双系统步骤详解

    Win7下U盘安装Ubuntu14 04双系统步骤详解 百度经验 http jingyan baidu com article 76a7e409bea83efc3b6e1507 html
  • 数据模型:数字化转型的核心能力

    业界数字化转型已经进入深水区 数据越来越受到大家重视 由于数据中台等等概念的兴起 大家越来越回到数据的根本问题 数据模型 今天不谈论高大上的数据中台 我想回到数据的本源 谈谈接地气的数据模型 大数据产业创新服务媒体 聚焦数据 改变商业 什么
  • Topaz Gigapixel AI 4.1.2 特别版 Mac 图片无损放大软件

    Topaz AI Gigapixel是一款由Topaz Labs公司开发的mac 软件 它使用深度学习技术 可以实现图片无损放大 使低分辨率图片转换成高分辨率 高质量的图片 还能够自动弥补图片损失的细节 增强画质 其实 对于像素图而言 无损
  • 想去谷歌工作?15个面试问题据说难倒天才!

    11月 15 日消息 谷歌公司的面试题在刁钻古怪方面相当出名 科技博客 BusinessInsider 贴出了 15 道谷歌面试题 并一一给出了答案 第一题 多少只高尔夫球才能填满一辆校车 职位 产品经理 解析 通过这道题 谷歌希望测试出求
  • 华为OD机试 - 找到比自己强的人数(Java)

    题目描述 给定数组 2 1 3 2 每组表示师徒关系 第一个元素是第二个元素的老师 数字代表排名 现在找出比自己强的徒弟 输入描述 无 输出描述 无 用例 输入 2 1 3 2 输出 0 1 2 说明 输入 第一行数据 2 1 表示排名第
  • 多益网络2022春笔试题记忆版

    多益网络笔试题 自己做完之后凭记忆整理出来的 填空题 数据结构 数据库 相对没那么难 所以只记了几个 选择题 1 A B C栈的出栈序列可能性有几种 2 关于队列 3 插入数据库表 name char 20 not null age cha
  • 毕业设计- 基于机器视觉的交通标志检测系统

    目录 前言 课题背景和意义 实现技术思路 一 交通标志检测识别理论基础 二 基于单阶段算法的交通标志检测 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量
  • [Intel汇编-NASM]基本语法

    1 NASM编译器介绍 1 Netwide Assembler 是目前唯一开源且免费的汇编器 2 该汇编器只提供编译的功能 但不提供连接的功能 在Linux下编译器产生 o文件后还需要使用ld链接器和操作系统的库链接才能形成可执行文件 而在
  • 男人怎么读 萨瓦迪卡!还是萨瓦迪卡不!

    泰国旅游中问候语 你好 是十分常见的 很早就听闻男同胞说萨瓦迪卡是不正确的 结果百度的结果是这样的 通篇并没有说正确的读音 修改关键词吧终于在知道里面找到想要的 是梵文 sawat 表示祝福 好运 dee表示好 sawatdee 表示 你好
  • 完成该操作所需的数据还不可使用

    原因是没有加下面两个判断条件 if xmlhttp readyState 4 if xmlhttp status 200
  • 【目标检测】从头到尾教你安装MMDetection(超详细版本)

    目录 MMDetection的安装过程 前言 一 本地环境 二 先决条件 1 从官方网站下载并安装Anaconda 2 创建 conda 环境并激活它 3 按照官方说明安装 PyTorch 例如 三 配置PyTorch环境时出现的第一个错误
  • vue引入elementUI部分组件库

    package json中加入 babel plugin component 1 1 1 借助 babel plugin component 我们可以只引入需要的组件 以达到减小项目体积的目的 如果你 只希望引入部分组件 比如 Button
  • AI学习_过拟合的细节,及其解决方法【未完成】

    要标准化 归一化的原因 把数据保留在 1 1之间 防止数值太大 发生梯度弥散 什么时候用标准化 什么时候用归一化 连续数据就用标准化 ps 但0不代表 大小 时 就不能用标准化了 BN的含义 标准化的意义 是统一量纲 BN其实是在nchw中
  • 小皮面板开启apache服务错误(主要是80端口被占用)

    在小皮面板中开启apache时出现这样的报错 98 Address already in use AH00072 make sock could not bind to address 80 98 Address already in us
  • 富士施乐3065扫描教程_富士施乐怎么设置扫描到PC

    展开全部 1 将复印机的IP输入在IE的地址栏里 32313133353236313431303231363533e59b9ee7ad9431333365666232用户名是11111 密码是x admin 进去以后找到协议下的9100项
  • Axure Share ——原型设计工具 Axure ,移动版

    什么是Axure Share Axure Share 是老牌原型设计工具Axure 的移动版 app 支持 iOS iPhone iPad 以及 Android 设备 我们可以使用它来查看和演示通过 Axure 制作的移动 app 原型 A
  • Vuex之理解mutation的用法

    一 什么是mutation 通俗的理解mutations 里面装着一些改变数据方法的集合 这是Veux设计很重要的一点 就是把处理数据逻辑方法全部放在mutations里面 使得数据和视图分离 切记 Vuex中store数据改变的唯一方法就