Vuex,在 Vue 组件中监听 Vuex 状态变化,使用watch监听Vuex中的数据

简介:在Vue应用程序中使用Vuex进行状态管理时,经常需要在组件中响应状态的变化。这里来记录一下

一. 在使用 Vuex 进行状态管理时,我们经常需要在组件中响应状态的变化。Vue 提供了两种方式来实现这一点:computed 属性和 watch 选项。这里,我们将通过一个示例来了解如何使用这两种方式来监听 Vuex 状态变化。

首先,我们看一下组件中的代码:

//VUE.JS
import { mapState } from 'vuex';export default {computed: {// 映射 Vuex 中的状态到当前组件的计算属性...mapState({areaLoadStatus: state => state.areaLoading,testDate: state => state.vuexRtspImg})},watch: {// 监听 Vuex 中的状态变化areaLoadStatus(newValue, oldVal) {console.log(newValue, oldVal)},testDate(newValue, oldVal) {console.log(newValue, oldVal)}}
}

在这段代码中,我们使用了 mapState 辅助函数将 Vuex 中的两个状态(areaLoadingvuexRtspImg)映射到组件的计算属性中。这样,我们就可以在组件模板中直接使用这些计算属性,而不必每次都通过 this.$store.state 来访问状态。

接下来,我们使用 watch 选项来监听这两个状态的变化。当状态发生变化时,相应的监听器函数会被调用,新值和旧值会作为参数传递进来。在这个例子中,我们只是简单地将新值和旧值打印到控制台,但实际情况下吗,你可以在这里执行任何所需的逻辑,例如更新组件的其他数据属性或触发事件函数(如发送 API 请求)。

值得注意的是,watch 选项并不是唯一的方式来响应状态变化。如果你只需要在模板中使用状态,那么计算属性可能是一个更好的选择。计算属性会基于依赖的状态自动重新计算,并且在状态变化时会自动更新。这使得它比 watch 选项更高效。

二. 现在,让我们看一下在 Vuex 中如何触发状态变化:

//VUEX
actions: {async callRtspImg(Con, row) {Con.state.areaLoading = true; // 更新 areaLoading 状态await postRtsp({ rtspPath: row.videoUrl, cameraId: row.cameraId }).then(res => {if (res.code === 200) {Con.state.areaLoading = false; // 更新 areaLoading 状态const data = res;Con.state.vuexRtsInfo.wd = data.imageWidth;Con.state.vuexRtsInfo.hg = data.imageHeight;Con.state.vuexRtsInfo.img = `data:image/gif;base64,${data.data}`;Con.state.vuexRtspImg = data.data; // 更新 vuexRtspImg 状态} else if (res.code !== 200) {// 处理错误}}).catch(() => {}).finally(() => {})}
}

在这段代码中,我们有一个名为 callRtspImg 的 Vuex action。在这个 action 中,我们首先将 areaLoading 状态设置为 true,表示正在加载数据。然后,我们发送一个 API 请求来获取数据。

如果请求成功(响应码为 200),我们会将 areaLoading 状态设置回 false,并更新 vuexRtsInfo 对象中的几个属性。最后,我们还更新了 vuexRtspImg 状态,将响应数据存储在其中。

由于我们在组件中监听了 areaLoadingvuexRtspImg 状态的变化,所以当这些状态发生更改时,相应的监听器函数会被触发。这使我们能够根据状态的变化执行所需的逻辑,例如更新用户界面或发送其他 API 请求。

总的来说,使用 Vuex 进行状态管理时,computed 属性和 watch 选项为我们提供了一种优雅的方式来响应状态变化。computed 属性更适合于在模板中使用状态,而 watch 选项则更适合于执行副作用或更新其他组件数据。选择使用哪种方式取决于你的具体需求,但无论如何,这两种方式都可以帮助你编写更加可维护和易于理解的代码。

创作不易,感觉有用,就一键三连,感谢(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重生奇迹mu再生宝石怎么用有什么用

重生奇迹mu再生宝石有2个用处: 1、在玛雅哥布林处给380装备加PVP属性4追4以上的380级装备,守护宝石一颗,再生宝石一颗,成功得到PVP装备,失败宝石消失,装备无变化; 2、给非套装点强化属性用法跟祝福,灵魂,生命一样直接往装备上敲,成功得到随机强化属性一…

八. Django项目之电商购物商城 -- 添加邮箱

Django项目之电商购物商城 – 添加邮箱 一. 用户中心 添加邮箱功能在用户中心中 , 先完善用户中心功能 1. 视图 # 用户中心 class UserInfoCenterView(LoginRequiredMixin,View):def get(self , request):context {username : request.user.username,mobile : request.use…

队列的实现以及队列如何实现栈

一、队列的定义 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为 队头 …

20240507 ubuntu20.04+ros noetic 跑通lioslam

任务:跑通lioslam 主要参考博客 IMU激光雷达融合使用LIO-SAM建图学习笔记——详细、长文、多图、全流程_ubuntu_AIDE回归线-GitCode 开源社区 (csdn.net) 1.不要用这一句 wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2…

【Spring】初识 Spring AOP(面向切面编程)

目录 1、介绍AOP 1.1、AOP的定义 1.2、AOP的作用 1.3、AOP的核心概念及术语 2、AOP实现示例 3、EnableAspectJAutoProxy注解 1、介绍AOP 1.1、AOP的定义 AOP(Aspect Orient Programming),直译过来就是面向切面编程,AOP 是一…

Windows Python 安装准备

首先安装配置 1. 环境的安装和配置: 运行环境: 官方提供了cpython解释器 编辑环境: 课程初级阶段:推荐大家使用: 记事本工具(UE、notepad++、editplus、sublime、vscode) 中期阶段IDE的使用,pycharm 2. 安装python环境: 在官方下载python解释器 www.python.org …

Ubuntu18.04--虚拟机配置Samba并从Windows登录

前言: 本文记录我自己在Windows上安装 Virtualbox ,并在Virtualbox中安装 Ubuntu-18.04 虚拟机,在Ubuntu-18.04虚拟机里安装配置Smaba服务器,从 Windows 宿主系统上访问虚拟机共享samba目录的配置命令。 引用: N/A 正文 虚拟…

[C++][数据结构]哈希3:unordered_map和unordered_set的模拟实现

前言 今天我们来试着用哈希封装一下unordered_map和unordered_set这两个容器 由于主要的哈希的模拟实现都在之前的文章中,所以本文只是对于几个小问题进行说明 KeyOfT:取出key 因为我们传的第二个模板参数是T,我们不知道他是key还是pair&l…

Three.js的材质Material信息

Material材质信息,是独立于物体顶点之外,与渲染效果相关的属性。比如通过设置材质可以改变物体的颜色、纹理贴图、光照模式等等。 基本材质【BasicMaterial】 基本材质BasicMaterial的物体,颜色不会因为光照产生明暗、阴影效果。如果没有指定的材质颜色,那么颜色就是随机…

协同过滤的一些理解

协同过滤的一些理解 以下是我对协同过滤的一些理解,欢迎来交。 什么是协同过滤 协同过滤:利用相似用户的行为或相似商品的特征来进行推荐。 协同过滤(Collaborative Filtering, CF)是推荐系统中一种常用的技术,它基于…

揭秘LLMOps,高效开发大型语言模型

大家好,随着人工智能(AI)的蓬勃发展,一个新兴领域语言模型运维(LLMOps)正逐渐成为关注的焦点。LLMOps专注于对大型语言模型(LLMs),例如OpenAI的GPT系列,进行全…

SpringBoot Actuator未授权访问漏洞的解决方法

1. 介绍 Spring Boot Actuator 是一个用于监控和管理 Spring Boot 应用程序的功能模块。它提供了一系列生产就绪的功能,帮助你了解应用程序的运行状况,以及在运行时对应用程序进行调整。Actuator 使用了 Spring MVC 来暴露各种 HTTP 或 JMX 端点&#x…

【机器学习】卷积神经(CNN)在图像识别中的革命性应用:自动驾驶的崛起

卷积神经网络(CNN)在图像识别中的革命性应用:自动驾驶的崛起 一、卷积神经网络(CNN)的基本原理二、CNN在图像识别中的显著成果三、CNN在自动驾驶汽车中的物体检测和识别四、CNN在图像识别中的代码实例 随着人工智能和深…

轮式机器人简介

迄今为止,轮子一般是移动机器人学和人造交通车辆中最流行的运动机构。它可达到很高的效率, 如图所示, 而且用比较简单的机械就可实现它的制作。 另外,在轮式机器人设计中,平衡通常不是一个研究问题。 因为在所有时间里,轮式机器人一般都被设计成在任何时间里所有轮子均与地接…

大模型系列之解读MoE

Mixtral 8x7B 的推出, 使我们开始更多地关注 基于MoE 的大模型架构, 那么,什么是MoE呢? 1. MoE溯源 MoE的概念起源于 1991 年的论文 Adaptive Mixture of Local Experts(https://www.cs.toronto.edu/~hinton/absps/jjn…

间隔采样视频的代码

项目统计模型准确率 项目会保存大量视频,为了统计模型的精度,我们想要十五分钟抽取一个视频用来统计。 import os import shutil from datetime import datetime, timedelta #抽取视频的代码,会在每个小时的0分、15分、30分、45分取一个命名…

c++ 和c回调混合的一种实现

代码 #include <iostream> #include <list>using namespace std; struct CallbackBase { virtual void operator()(const char* msg,int len) 0; };void messagesCB(const char* msg,int len) {std::cout<<msg<<" "<<len<<std…

中国土壤类型空间分布数据

中国土壤类型空间分布数据根据全国土壤普查办公室1995年编制并出版的《1&#xff1a;100万中华人民共和国土壤图》数字化生成&#xff0c; 采用了传统的“土壤发生分类”系统&#xff0c;基本制图单元为亚类&#xff0c;共分出12土纲&#xff0c;61个土类&#xff0c;227个亚类…

JavaScript原理篇——Promise原理及笔试题实战演练

Promise 是 JavaScript 中用于处理异步操作的对象&#xff0c;它代表了一个可能还没有完成的操作的最终完成或失败&#xff0c;以及其结果值。Promise 对象有三种状态&#xff1a; Pending&#xff08;进行中&#xff09;&#xff1a;初始状态&#xff0c;既不是成功&#xff0…

JavaScript BOM - 浏览器对象模型

BOM&#xff08;浏览器对象模型&#xff09;是JavaScript中与浏览器交互的一组API&#xff0c;它提供了一种方法来操作浏览器窗口和文档。BOM由一组对象组成&#xff0c;这些对象允许您访问浏览器本身的功能&#xff0c;而不仅仅是网页内容。 BOM对象包括&#xff1a; window对…