vue3 watch監視詳解

watch監視

一 :watch監視{ref}定義的基本類型結構

<template><div class="person"><h1>情況一:watch監視{ref}定義的基本類型結構</h1><h1>當前的和為{{ sum }}</h1><button @click="changeSum">點我sum+1</button></div>
</template><script lang="ts" setup name="Person">import {ref,watch} from 'vue'let sum=ref(0)function changeSum(){sum.value +=1;}//監視情況一:watch監視{ref}定義的基本類型結構//當新的值大于等于8的時候停止監視const stopWatch=watch(sum,(newValue,oldValue)=>{console.log('sum變化了一下',newValue,oldValue)if(newValue>=8){stopWatch()}})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
點擊按鈕之后 價格加一 watch監視sum 在控制臺打印了新的值和舊的值

在這里插入圖片描述
當新的值大于等于8的時候停止監視

在這里插入圖片描述

二 :watch監視{ref}定義的對象類型結構

  • watch的第一個參數:被監視的數據
  • watch的第二個參數:回調函數
  • watch的第三個參數:監視配置(deep,immediade等等)
<template><div class="person"><h1>情況二:watch監視{ref}定義的【對象類型】結構</h1><h2>汽車名字:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><button @click="changeName">修改汽車名字</button><button @click="changePrice">修改汽車價格</button><button @click="changeCar">修改汽車</button></div>
</template><script lang="ts" setup name="Person">import {ref,watch} from 'vue'let car=ref({name:'蘭博基尼',price:1000000})function changeName(){car.value.name+='6'}function changePrice(){car.value.price+=10000}function changeCar(){car.value ={name:"寶馬",price:300000}}//監視【ref】定義的【對象類型】數據,監視的是對象的地址值watch(car,(newValue,oldValue)=>{console.log('car改變了',newValue,oldValue)})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
在這里修改汽車名字 和修改汽車價格 控制臺都不會打印最新的值和舊的值 是因為監視的是對象的地址值

若想監視對象內部屬性的變化的話,需要手動開啟深度監視

<template><div class="person"><h1>情況二:watch監視{ref}定義的【對象類型】結構</h1><h2>汽車名字:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><button @click="changeName">修改汽車名字</button><button @click="changePrice">修改汽車價格</button><button @click="changeCar">修改汽車</button></div>
</template><script lang="ts" setup name="Person">import {ref,watch} from 'vue'let car=ref({name:'蘭博基尼',price:1000000})function changeName(){car.value.name+='6'}function changePrice(){car.value.price+=10000}function changeCar(){car.value ={name:"寶馬",price:300000}}//監視【ref】定義的【對象類型】數據,監視的是對象的地址值watch(car,(newValue,oldValue)=>{console.log('car改變了',newValue,oldValue)},{deep:true})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
這個時候對象內部屬性發生改變了 那么他監視也會打印出新的值和舊的值
在這里插入圖片描述

三:監視{reactive}定義的【對象類型】結構

監視【reactive】定義的【對象類型】數據,且默認開啟深度監視


<template><div class="person"><h1>情況三:監視{reactive}定義的【對象類型】結構</h1><h2>汽車名字:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><button @click="changeName">修改汽車名字</button><button @click="changePrice">修改汽車價格</button><button @click="changeCar">修改汽車</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'let car=reactive({name:'蘭博基尼',price:1000000})function changeName(){car.name+='6'}function changePrice(){car.price+=10000}function changeCar(){Object.assign(car,{name:"寶馬",price:300000})}//監視【reactive】定義的【對象類型】數據,且默認開啟深度監視watch(car,(newValue,oldValue)=>{console.log('car改變了',newValue,oldValue)   })
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
當點擊修改汽車名字 或修改汽車價格 或 修改汽車時 他都監視到了
在這里插入圖片描述

情況四:監視{reactive}定義的【對象類型】結構的某一個屬性

  1. 若該屬性值不是【對象類型】,需要寫成函數形式。
<template><div class="person"><h1>情況四:監視{reactive}定義的【對象類型】結構的某一個屬性的時候</h1><h2>汽車品牌:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><h2>汽車樣式:{{ car.design.first }} ,{{ car.design.second }}</h2><button @click="changeName">修改汽車品牌</button><button @click="changePrice">修改汽車價格</button><button @click="changeFirst">修改汽車樣式一</button><button @click="changeSecond">修改汽車樣式二</button><button @click="changeDesign">修改整個汽車樣式</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'let car=reactive({name:'奔馳',price:300000,design:{first:'梅賽德斯',second:'E300'}})function changeName(){car.name+='6'}function changePrice(){car.price+=10000}function changeFirst(){car.design.first='奔馳C260l'}function changeSecond(){car.design.second='奔馳A'}function changeDesign(){car.design={first:'奔馳GLS',second:'奔馳EQ'}}//假如我只想監視cat.namewatch(()=>{return car.name},(newValue,oldValue)=>{console.log('car.name改變了',newValue,oldValue)})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
假如我修改汽車價格 修改汽車樣式一 修改汽車樣式二 修改整個汽車樣式 都不會監視 因為我只監視了car.name 只有car.name 發生了改變的時候 控制臺才會輸出新的值 和舊的值

在這里插入圖片描述
2. 若該屬性值依然是【對象類型】,可直接編,也可寫成函數,不過建議寫成函數。

假設我想只監視整個汽車樣式修改

<template><div class="person"><h1>情況四:監視{reactive}定義的【對象類型】結構的某一個屬性的時候</h1><h2>汽車品牌:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><h2>汽車樣式:{{ car.design.first }} ,{{ car.design.second }}</h2><button @click="changeName">修改汽車品牌</button><button @click="changePrice">修改汽車價格</button><button @click="changeFirst">修改汽車樣式一</button><button @click="changeSecond">修改汽車樣式二</button><button @click="changeDesign">修改整個汽車樣式</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'let car=reactive({name:'奔馳',price:300000,design:{first:'梅賽德斯',second:'E300'}})function changeName(){car.name+='6'}function changePrice(){car.price+=10000}function changeFirst(){car.design.first='奔馳C260l'}function changeSecond(){car.design.second='奔馳A'}function changeDesign(){car.design={first:'奔馳GLS',second:'奔馳EQ'}}// //假如我只想監視cat.name// watch(()=>{return car.name},(newValue,oldValue)=>{//     console.log('car.name改變了',newValue,oldValue)// })//假如我只想監視cat.designwatch(()=>car.design,(newValue,oldValue)=>{console.log('car.name改變了',newValue,oldValue)},{deep:true})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
當我點擊修改汽車品牌 或修改汽車價格 他并沒有監視 , 因為我只監視修改汽車樣式 不論是修改汽車樣式一 還是 修改汽車樣式二 或者是修改整個汽車樣式 他都監視到了
在這里插入圖片描述

情況五:監視上述的多個數據

<template><div class="person"><h1>情況五:監視上述的多個數據</h1><h2>汽車品牌:{{ car.name }}</h2><h2>汽車價格:{{ car.price }}</h2><h2>汽車樣式:{{ car.design.first }} ,{{ car.design.second }}</h2><button @click="changeName">修改汽車品牌</button><button @click="changePrice">修改汽車價格</button><button @click="changeFirst">修改汽車樣式一</button><button @click="changeSecond">修改汽車樣式二</button><button @click="changeDesign">修改整個汽車樣式</button></div>
</template><script lang="ts" setup name="Person">import {reactive,watch} from 'vue'let car=reactive({name:'奔馳',price:300000,design:{first:'梅賽德斯',second:'E300'}})function changeName(){car.name+='6'}function changePrice(){car.price+=10000}function changeFirst(){car.design.first='奔馳C260l'}function changeSecond(){car.design.second='奔馳A'}function changeDesign(){car.design={first:'奔馳GLS',second:'奔馳EQ'}}//監視  :情況5:監視上述多個數據watch([()=>car.name,()=>car.design.first],(newValue,oldValue)=>{console.log('car.name改變了',newValue,oldValue)},{deep:true})
</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

在這里插入圖片描述
這時候當我修改汽車名字 和汽車第一個樣式 他會打印出來新的值和舊的值
在這里插入圖片描述

watchEffect監視

<template><div class="person"><h1>需求:若寬度達到20 或者高度達到15時   向服務器發送一個請求</h1><h2>寬度為:{{ width }}</h2><h2>高度為:{{ height }}</h2><button @click="changeWidth">點我寬加一</button><button @click="changeHeigth">點我高加一</button></div>
</template><script lang="ts" setup name="Person">import {ref,watch,watchEffect} from 'vue'let width=ref(15)let height=ref(10)function changeWidth(){width.value +=1}function changeHeigth(){height.value +=1}watchEffect(()=>{if(width.value >=20 || height.value >=15){console.log('向服務器發送請求')}})</script><style>.person{background-color: rebeccapurple;box-shadow: 0 0 10px;padding: 20px;border-radius: 10px;}button{margin: 0 6px;}
</style>

當我想要在寬度達到20 或者高度達到15時 向服務器發送一個請求 那我就用watchEffect監視
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87452.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87452.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TensorFlow Serving學習筆記2: 模型服務

本文深入剖析 TensorFlow Serving 的核心架構與實現機制&#xff0c;結合源碼分析揭示其如何實現高可用、動態更新的生產級模型服務。 一、TensorFlow Serving 核心架構 1.1 分層架構設計 TensorFlow Serving 采用模塊化分層設計&#xff0c;各組件職責分明&#xff1a; 組件…

共享云桌面為什么能打敗傳統電腦

近年來&#xff0c;隨著云桌面技術的快速發展&#xff0c;共享云桌面作為一種新型的計算模式&#xff0c;正在逐步改變人們的工作和生活方式。它憑借其獨特的優勢&#xff0c;正在逐步取代傳統電腦&#xff0c;成為企業和個人用戶的新選擇。之所以在部分場景中展現出替代傳統電…

B站PWN教程筆記-12

完結撒花。 今天還是以做題為主。 fmtstruaf 格式化字符串USER AFTER FREE 首先補充一個背景知識&#xff0c;指針也是有數據類型的&#xff0c;不同數據類型的指針xx&#xff0c;所加的字節數也不一樣&#xff0c;其實是指針指的項目的下一項。如int a[20]&#xff0c;a是…

零基礎設計模式——總結與進階 - 3. 學習資源與下一步

第五部分&#xff1a;總結與進階 - 3. 學習資源與下一步 到這里&#xff0c;你已經完成了設計模式主要內容的學習。但這僅僅是一個開始&#xff0c;設計模式的精髓在于實踐和持續學習。本節將為你提供一些優質的學習資源和后續學習的建議&#xff0c;幫助你在這條道路上走得更…

多模態大語言模型arxiv論文略讀(125)

Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ?? 論文標題&#xff1a;Uni-Med: A Unified Medical Generalist Foundation Model For Multi-Task Learning Via Connector-MoE ?? 論文作者&#xff1a;Xun Zhu, Yi…

【學習筆記】NLP 基礎概念

1.1 什么是 NLP 定義&#xff1a; 自然語言處理&#xff08;NLP&#xff09;**是一種讓計算機理解、解釋和生成人類語言的技術。它是人工智能領域中極為活躍且重要的研究方向&#xff0c;旨在模擬人類對語言的認知和使用過程 特點&#xff1a; 多學科交叉&#xff1a;結合計…

RNN為什么不適合大語言模型

在自然語言處理&#xff08;NLP&#xff09;領域中&#xff0c;循環神經網絡&#xff08;RNN&#xff09;及衍生架構&#xff08;如LSTM&#xff09;采用序列依序計算的模式&#xff0c;這種模式之所以“限制了計算機并行計算能力”&#xff0c;核心原因在于其時序依賴的特性&a…

微信小程序一款不錯的文字動畫

效果圖 .js Page({data: {list:[],animation:[text-left,text-right,text-top,text-bottom],text:[[春眠不覺曉&#xff0c;處處聞啼鳥。,夜來風雨聲&#xff0c;花落知多少。 ],[床前明月光&#xff0c;疑是地上霜。,舉頭望明月&#xff0c;低頭思故鄉。],[千山鳥飛絕&#…

循環神經網絡(RNN):序列數據處理的強大工具

在人工智能和機器學習的廣闊領域中&#xff0c;處理和理解序列數據一直是一個重要且具有挑戰性的任務。循環神經網絡&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;作為一類專門設計用于處理序列數據的神經網絡&#xff0c;在諸多領域展現出了強大的能力。從…

手機SIM卡通話中隨時插入錄音語音片段(Windows方案)

手機SIM卡通話中隨時插入錄音語音片段&#xff08;Windows方案&#xff09; --本地AI電話機器人 上一篇&#xff1a;手機SIM卡通話中隨時插入錄音語音片段&#xff08;Android方案&#xff09;??????? 下一篇&#xff1a;???????編寫中 一、前言 書接上文《手…

阿里云通義大模型:AI浪潮中的領航者

通義大模型初印象 在當今 AI 領域蓬勃發展的浪潮中&#xff0c;阿里云通義大模型宛如一顆璀璨的明星&#xff0c;迅速崛起并占據了重要的地位。隨著人工智能技術的不斷突破&#xff0c;大模型已成為推動各行業數字化轉型和創新發展的核心驅動力。通義大模型憑借其強大的技術實…

【算法篇】逐步理解動態規劃模型7(兩個數組dp問題)

目錄 兩個數組dp問題 1.最長公共子序列 2.不同的子序列 3.通配符匹配 本文旨在通過對力扣上三道題進行講解來讓大家對使用動態規劃解決兩個數組的dp問題有一定思路&#xff0c;培養大家對狀態定義&#xff0c;以及狀態方程書寫的思維。 順序&#xff1a; 題目鏈接-》算法思…

什么是 HTTP Range 請求(范圍請求)

HTTP Range 請求&#xff0c;即范圍請求&#xff0c;是一種 HTTP 請求方法&#xff0c;允許客戶端請求資源的部分數據。這種請求在處理大型文件&#xff08;如視頻、音頻、或大文件下載&#xff09;時特別有用&#xff0c;因為它可以有效地進行斷點續傳和按需加載數據&#xff…

java集合(十) ---- LinkedList 類

目錄 十、LinkedList 類 10.1 位置 10.2 特點 10.3 與 ArrayList 的區別 10.4 構造方法 10.5 常用方法 十、LinkedList 類 10.1 位置 LinkedList 類位于 java.util 包下 10.2 特點 是 List 接口的實現類是 Deque 接口的實現類底層使用雙向循環鏈表結構 10.3 與 Arra…

kafka消費的模式及消息積壓處理方案

目錄 1、kafka消費的流程 2、kafka的消費模式 2.1、點對點模式 2.2、發布-訂閱模式 3、consumer消息積壓 3.1、處理方案 3.2、積壓量 4、消息過期失效 5、kafka注意事項 Kafka消費積壓(Consumer Lag)是指消費者處理消息的速度跟不上生產者發送消息的速度&#xff0c;導致消息在…

RAG實踐:Routing機制與Query Construction策略

Routing機制與Query Construction策略 前言RoutingLogical RoutingChatOpenAIStructuredRouting DatasourceConclusion Semantic RoutingEmbedding & LLMPromptRounting PromptConclusion Query ConstructionGrab Youtube video informationStructuredPrompt GithubReferen…

基于python的web系統界面登錄

#讓我們的電腦可以支持服務訪問 #需要一個web框架 #pip install Flask from flask import Flask, render_template,request from random import randint app Flask(__name__) app.route(/index) def index():uname request.args.get("uname")return f"主頁&am…

MATLAB Simulink 終極入門指南:從零設計智能控制系統

為什么工程師都愛Simulink? 想象一下:不寫一行代碼就能設計機器人控制器、飛行算法甚至核反應堆! MATLAB Simulink正是這樣的可視化神器。全球70%的汽車ECU、航天器控制系統用它開發。本文將帶你從零設計一個智能溫控系統,融入創新性的模糊PID控制,并生成可部署的C代碼!…

vue3 javascript 復雜數值計算操作技巧

在Vue 3中處理復雜數值計算&#xff0c;你可以采用多種策略來確保代碼的可讀性、可維護性和性能。以下是一些實用的技巧和最佳實踐&#xff1a; 1. 使用計算屬性&#xff08;Computed Properties&#xff09; Vue 3的computed屬性非常適合處理復雜的數值計算。它們是基于響應…

26.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--角色權限管理

在現代企業級應用中&#xff0c;角色權限管理是保障系統安全和提升用戶體驗的核心基礎功能。一個高效的角色權限系統不僅能夠有效防止越權訪問&#xff0c;還能簡化系統的維護和擴展。本文將系統性介紹角色權限管理的核心實現思路&#xff0c;包括架構設計、性能優化、安全機制…