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.pswp.cn/web/10249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10249.shtml
英文地址,請注明出處:http://en.pswp.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對…