Vuex中的getter和mutation有什么区别
在现代前端开发中,状态管理是一个不可忽视的话题,而Vuex作为Vue.js的官方状态管理库,在大型应用中扮演着至关重要的角色。当我们使用Vuex进行状态管理时,getter和mutation是两个重要的概念。虽然它们都是用来处理状态的,但是它们的功能和使用场景却大相径庭。在本文中,我们将详细探讨getter和mutation的区别,并通过示例代码帮助理解。
何为Mutation?
Mutation是Vuex中用于更改状态的方法。它不能是异步的,因此所有的状态修改都需要在mutation中以同步的方式完成。Mutation的作用是负责维护状态的一致性。在Vuex中,每个mutation都有一个字符串类型的事件类型和一个回调函数,该回调函数会接受当前的状态和负载(payload)作为参数。
Mutation 示例代码
我们以一个简单的计数器示例来说明mutation的使用。首先,我们来创建Vuex的store并定义一个mutation。
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;},setCount(state, payload) {state.count = payload;}}
});
在这个示例中,我们有一个count状态,并定义了三个mutations:increment、decrement和setCount。这三个方法都是用来修改状态的。你可以通过store.commit方法来调用这些mutations。
调用Mutation
我们可以在组件中调用mutation,如下所示:
<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button><button @click="reset">Set Count to 10</button></div>
</template><script>
export default {computed: {count() {return this.$store.state.count;}},methods: {increment() {this.$store.commit('increment');},decrement() {this.$store.commit('decrement');},reset() {this.$store.commit('setCount', 10);}}
};
</script>
在这个组件中,我们通过this.$store.commit调用定义好的mutations,来增加、减少或重置计数。
何为Getter?
Getter是Vuex提供的用于获取状态的计算属性。它们的功能有点类似于Vue的计算属性,它们可以基于store中的状态计算出一些派生状态。Getter不仅可以读取状态,还可以使用输入参数并返回加工后的状态值。
Getter 示例代码
在我们的计数器示例中,我们可以添加一个getter来获取当前计数的平方值。
const store = new Vuex.Store({state: {count: 0},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;},setCount(state, payload) {state.count = payload;}},getters: {squareCount(state) {return state.count * state.count;}}
});
在这个示例中,我们定义了一个gettersquareCount,它返回count状态的平方值。
使用Getter
在组件中,我们可以像使用计算属性一样使用getter:
<template><div><p>Count: {{ count }}</p><p>Square Count: {{ squareCount }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button><button @click="reset">Set Count to 10</button></div>
</template><script>
export default {computed: {count() {return this.$store.state.count;},squareCount() {return this.$store.getters.squareCount;}},methods: {increment() {this.$store.commit('increment');},decrement() {this.$store.commit('decrement');},reset() {this.$store.commit('setCount', 10);}}
};
</script>
在这个组件中,我们通过this.$store.getters.squareCount获取到当前计数的平方值并展示在视图中。
Getter与Mutation的主要区别
功能不同
- Mutation: 用于更改状态,必须是同步的,专注于更新store中的数据。
- Getter: 用于获取状态的派生值,可以基于state生成新值,也可以接受参数,通常用于对状态的计算和过滤操作。
使用方式不同
- Mutation: 使用store.commit来调用。
- Getter: 使用store.getters来获取。
同步与异步
- Mutation: 必须是同步,所有状态变化都要在Mutation中完成,上层组件的状态反应也是同步的。
- Getter: 可以从状态中计算出派生状态,通常是通过对状态值的运算得出。
使用场景不同
- Mutation: 用于响应用户的操作,例如点击按钮后增加计数,需要更改状态。
- Getter: 用于获取状态的计算结果,例如显示某个状态的平方、和或其他派生数据。
结论
在Vuex中,有效地区分getter和mutation是使用状态管理的基础。在复杂的应用中,准确地管理状态与数据流至关重要。我们通过例子理解了getter和mutation的定义、用法以及它们之间的核心区别。在日常开发中,务必注意这两者的功能划分,以保持代码的整洁与可维护性。
相关文章:
Vuex中的getter和mutation有什么区别
在现代前端开发中,状态管理是一个不可忽视的话题,而Vuex作为Vue.js的官方状态管理库,在大型应用中扮演着至关重要的角色。当我们使用Vuex进行状态管理时,getter和mutation是两个重要的概念。虽然它们都是用来处理状态的࿰…...
笔试-二维数组2
应用 现有M(1<M<10)个端口组,每个端口组是长度为N(1<N<100),元素均为整数。如果这些端口组间存在2个及以上的元素相同,则认为端口组可以关联合并;若可以关联合并,请用二位数组表示输出结果。其中…...
基于RIP的MGRE VPN综合实验
实验拓扑 实验需求 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证,R5为主认证方; R2与R5之间使用ppp的CHAP认证,R5为主认证方; R3与R5之间使用HDLC封…...
十三先天记
没有一刻,只有当下在我心里。我像星星之间的空间一样空虚。他们是我看到的第一件事,我知道的第一件事。 在接下来的时间里,我意识到我是谁,我是谁。我知道星星在我上方,星球的固体金属体在我脚下。这个支持我的世界是泰…...
Autosar-Os是怎么运行的?(Os基础模块)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 书接上文 Autosar-Os是怎么运行的?(一)-CSDN博客 目录 1.Resourc…...
OPencv3.4.1安装及配置教程
来到GitHub上opencv的项目地址 https://github.com/opencv/opencv/releases/tag/3.4.1 以上资源包都是 OpenCV 3.4.1 版本相关资源,它们的区别如下: (1). opencv-3.4.1-android-sdk.zip:适用于 Android 平台的软件开发工具包(SDK…...
选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制):https:/…...
Vue.js组件开发-如何实现带有搜索功能的下拉框
创建 Vue 项目: 如果还没有创建一个 Vue 项目,可以使用 Vue CLI 来创建一个新的项目。 vue create my-project cd my-project安装依赖: 如果需要使用第三方组件库,比如 Element UI 或 Ant Design Vue,可以安装相应的…...
java 字符串日期字段格式化前端显示
在 Java 应用程序中,如果你有一个字符串类型的日期字段,并希望将其格式化后显示在前端,可以通过多种方式实现。这通常涉及到在后端将字符串转换为 Date 或 LocalDateTime 等对象,然后使用适当的注解或配置来确保它们以正确的格式序…...
LeetCode题练习与总结:安装栅栏--587
一、题目描述 给定一个数组 trees,其中 trees[i] [xi, yi] 表示树在花园中的位置。 你被要求用最短长度的绳子把整个花园围起来,因为绳子很贵。只有把 所有的树都围起来,花园才围得很好。 返回恰好位于围栏周边的树木的坐标。 示例 1: 输…...
< OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对
信息来源: 文件:/var/log/auth.log 因为在 sshd_config 配置文件中,已经定义 LogLevel INFO 部分内容: 2025-01-27T18:18:55.68272708:00 jpn sshd[15891]: Received disconnect from 45.194.37.171 port 58954:11: Bye Bye […...
使用八爪鱼爬虫和Web Scraper抓取数据实战案例,附详细教程
最近有不少小伙伴咨询怎么抓取抖音视频或者评论的数据,他们多是自媒体或者商家,想要模仿爆火视频或者分析视频评论区的舆情信息,确实呀,现在抖音是流量高地,淘金的地方,真的是一个值得挖掘的宝藏。当然我一…...
海外问卷调查渠道查如何设置:最佳实践+示例
随着经济全球化和一体化进程的加速,企业间的竞争日益加剧,为了获得更大的市场份额,对企业和品牌而言,了解受众群体的的需求、偏好和痛点才是走向成功的关键。而海外问卷调查才是获得受众群体痛点的关键,制作海外问卷调…...
【C++数论】880. 索引处的解码字符串|2010
本文涉及知识点 数论:质数、最大公约数、菲蜀定理 LeetCode880. 索引处的解码字符串 给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时,从编码字符串中 每次读取一个字符 ,并采取以下步骤: 如果所读的字符是…...
从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
目录 0. 经验分享:产品推荐 1. 经验分享:提示词优化 2. 经验分享:使用cursor 阅读一篇文章 3. 经验分享:使用cursor 阅读一个完全陌生的开源项目 4. 经验分享:手搓一个text2sql agent (使用langchain l…...
freeswitch在centos上编译过程
操作系统:centos9-last usr/local/freeswitch/bin/freeswitch -version FreeSWITCH version: 1.10.13-devgit~20250125T131725Z~3f1e4bf90a~64bit (git 3f1e4bf 2025-01-25 13:17:25Z 64bit)vi /etc/ssh/sshd_config ip a nmtui reboot ip a curl -o /etc/pki/rpm-…...
项目测试之MockMvc
文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,…...
Blazor-选择循环语句
今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…...
【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.基本概念2.Python中的数据结构1. 列表(List)2. 元组(Tuple)3. 字典&#…...
appium自动化环境搭建
一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用,支持多种编程语言(python,java,Ruby,Javascript、PHP等) 原生应用和混合应用…...
大数据Hadoop入门2
目录 第三部分(Hadoop MapReduce和Hadoop YARN) 1.课程内容-大纲-学习目标 2.理解先分再合、分而治之的思想 3.hadoop团队针对MapReduce的设计构思 4.Hadoop MapReduce介绍、阶级划分和进程组成 5.Hadoop MapReduce官方示例-圆周率PI评估 6.Hadoo…...
21.Word:小赵-毕业论文排版❗【39】
目录 题目 NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 题目 NO1.2 自己的论文当中接收老师的修改:审阅→比较→源文档:考生文件夹:Word.docx→修订的文档:考生文件夹:教师修改→确定→接收→接收所有修订将合并之…...
【go语言】并发编程
一、协程、线程、进程 在计算机编程中,进程、线程和协程都是用于并发执行任务的不同概念。他们的区别主要体现在创建、管理和调度的复杂度上,特别是在不同的编程语言中有不同的实现方式。下面是他们的详细区别和在 go 语言中的实现方式。 1.1 进程 定义…...
算法1-1 模拟与高精度
目录 一 阶乘数码 二 麦森数 三 模拟题 一 阶乘数码 本题中n<1000,1000的阶乘为以下这么大,远超long的范围 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901…...
JS中对数组的操作哪些会改变原数组哪些不会?今天你一定要记下!
JavaScript 数组方法:变更原数组与不变更原数组的区别 在 JavaScript 中,数组是非常常见且重要的数据结构。作为开发者,我们常常需要使用数组方法来处理数组数据。但是,数组的不同方法会以不同的方式影响原数组,它们可…...
公式与函数的应用
一 相邻表格相乘 1 也可以复制 打印标题...
ShenNiusModularity项目源码学习(7:数据库结构)
ShenNiusModularity项目默认使用mysql数据库,数据库连接字符串放到了ShenNius.Admin. Mvc、ShenNius.Admin.Hosting的appsettings.json文件内。 ShenNiusModularity项目为自媒体内容管理系统,支持常规管理、CMS管理、商城管理等功能,其数…...
【STL笔记】字符串
字符串 下标从0开始,常规用法不再赘述,持续更新中… 1. substr(pos,len): 返回从位置 pos 开始,长度为 len 的子串。(len默认为npos) std::string str "Hello, World!"; std::string sub1 str.substr(7, 5); // 提…...
java知识点 | java中不同数据结构的长度计算
在Java中,size 和 length是两个不同的属性,分别用于不同的数据结构。以下是它们的详细区别和适用场景: 1.length 适用对象: 数组(Array):数组是一个固定长度的线性数据结构,其长度是…...
WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
