詳解Vue中的computed和watch

詳解Vue中的computed和watch

  • 前言
  • 原理
    • computed
      • computed特點
      • computed有幾種創建方式
      • 應用
    • Watch
      • Watch有幾種創建方式
      • Watch主要內容
      • Watch特性
      • 應用場景
  • computed和Watch區別

前言

在Vue當中,watchcomputed都可以實現監聽的效果,本文主要是圍繞watch和computed這兩個屬性來進行深入的講解,講解內容包括它們的原理、實現方式、各自優劣以及區別。

原理

computed

概念:通過對某個屬性值進行一系列計算,讓該屬性值為一個新的值。在計算過程中,可以調用多個其他屬性值用于計算。
computed又稱計算屬性,它主要作用就是用于在Vue當中監聽某個屬性的變化。舉個例子來分別演示沒有computed和用了computed的vue實例。
需求:讓兩個數字相加求解。
沒有用computed:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!--1.導入Vue的庫文件--><script src="vue.js"></script></head><body><div id="app">a:<input type="number" v-model="a"><br>b:<input type="number" v-model="b"><br><button @click="btn">計算</button><div>相加等于:{{ c }}</div></div><!--2.創建Vue的實例對象--><script>//創建Vue的實例const vm = new Vue({// el屬性是固定寫法。// 表示當前的VM實例要控制頁面上的哪上區域,收接的是一個選擇器。el: "#app",data: {a: '',b: '',c: null},methods: {btn() {this.c = parseFloat(this.a) + parseFloat(this.b)}}})</script></body>
</html>

在上述代碼中,我們可以發現,求解是用了一個按鈕實現,首先我們創建了Vue實例,然后創建三個變量a,b,c,c是結果,a,b是兩個數字,用v-model進行數據綁定后,輸入點擊按鈕后就能出現結果。那么如果使用計算屬性computed,也可以用另一種方式實現相同的效果。計算操作在計算屬性中進行實現。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!--1.導入Vue的庫文件--><script src="vue.js"></script></head><body><div id="app">a:<input type="number" v-model="a"><br>b:<input type="number" v-model="b"><br><div>結果:{{ c }}</div></div><!--2.創建Vue的實例對象--><script>//創建Vue的實例const vm = new Vue({// el屬性是固定寫法。// 表示當前的VM實例要控制頁面上的哪上區域,收接的是一個選擇器。el: "#app",data: {a: '',b: '',},computed:{c(){return parseFloat(this.a)+parseFloat(this.b);}}})</script></body>
</html>

在上述代碼中,我們可以看到,計算屬性代替了按鈕實現了相同的計算功能。那么同時我們發現,計算屬性要放在computed節點下才生效,而節點下的計算屬性,語法格式和定義method方法的語法格式相同,這個計算屬性,會實時監聽它的屬性值是否發生改變,如果發生改變就會立即緩存,不需要任何人為操作。它在初始化時就會進行緩存,那么在上述代碼中,它的初始值就為NaN,NaN展開就為Not a Number,中文叫非數。輸入a和b的數字后,就可以看到立刻發生變化。

computed特點

  • 計算屬性都放在computed節點下。
  • 定義方式和方法相同。
  • 只要該計算屬性的依賴屬性發生改變,它就會重新計算并進行視圖更新以及計算屬性緩存。
  • 所有的計算屬性都有緩存機制,當初始化后即開始了第一次計算屬性緩存,而看到的值,實際是從緩存中拿到的。
  • 惰性執行:如果不調用這個計算屬性,但是依賴項改變了,那屬性會被標記為dirty,但是它計算,只有調用了且被標記為dirty了,它才會進行計算緩存和更新操作。
  • 不允許執行異步操作

computed有幾種創建方式

兩種,一種函數式,一種對象式。

function a(){} || a:{get(){},set(){}}

應用

  • 當一個屬性頻繁的受其他多個屬性影響時可以被應用。

Watch

概念: 監聽器,是Vue實例的一個屬性,是用來響應數據的變化,需要在數據變化時執行異步或開銷較大的操作時,這個方式是最有用的。

大白話就是,監聽某個屬性值是否變化,如果該屬性值發生改變,則做一系列與改變有關的操作。

實例:輸入姓,輸入名,得到姓名

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!--1.導入Vue的庫文件--><script src="vue.js"></script></head><body><div id="app">:<input type="text" v-model="x"><br>:<input type="text" v-model="m"><br><div>結果:{{ xm }}</div></div><!--2.創建Vue的實例對象--><script>//創建Vue的實例const vm = new Vue({// el屬性是固定寫法。// 表示當前的VM實例要控制頁面上的哪上區域,收接的是一個選擇器。el: "#app",data: {x: '李',m: '華',xm:''},watch:{x:{handler(oldValue,newValue){this.xm=newValue+this.m}},m:{handler(oldValue,newValue){this.xm=this.x+newValue;}}}})</script></body>
</html>

首先我們分析這個需求,如果把這個需求放在計算屬性中,我們發現只需要一個計算屬性result就可以實現,而監聽需要做兩個,因為我們要監聽的是姓和名兩個屬性值,這和計算屬性和判斷依賴項是否改變是不同的,這也決定了它們適用的方向不同。

Watch有幾種創建方式

五種:函數、對象、數組、函數名

常用的還是第一種:

watch:{監聽屬性名:{handler(監聽前值,監聽后值){代碼邏輯}}}

Watch主要內容

handler:回調函數,也就是監聽到變化后執行的函數。
deep:確認是否深入監聽,假設有個深層對象,當它很多層內的數據發生變化,是否依舊能監聽到且執行回調函數,如果想監聽到,可以開啟深度監聽。
immediate:默認是false,false則初始化頁面后不調用監聽回調函數,true則第一次進入頁面就調用回調函數且綁定值。

Watch特性

  • 默認初次進入頁面不調監聽函數(immediate:true解決)
  • 一個監聽函數只能監聽一個屬性值
  • 默認當對象屬性值發生改變不調監聽(deep:true解決)
  • 允許執行異步操作,比如調用一個API。

應用場景

  • 一次只能監聽一個數據,并處理數據相關的代碼邏輯。
  • 百度聯想詞
  • 復雜的業務邏輯或調用異步API,如AJAX。

computed和Watch區別

下面簡稱computed為c,Watch為w。

  1. c發生改變是因為依賴項改變,所以它能監聽幾個屬性取決于它有幾個依賴屬性,所以它能監聽一個或多個屬性,w一次只能監聽一個屬性。
  2. 因為c的值是被同步計算出來的,先判斷依賴是否改變,改變則計算,計算后緩存,緩存后顯示,所以c不能異步操作,w能異步。
  3. c要判斷依賴項是否改變,改變后需要計算才能緩存,而watch監聽到改變就立刻執行相關操作。
  4. c可以類似data直接訪問到,watch不能。
  5. 所以說計算多個屬性時可以用computed,監聽一個屬性或處理異步或邏輯較難業務可以用watch。

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

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

相關文章

【理解ARM架構】操作寄存器實現UART | 段的概念 | IDE背后的命令

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;專欄&#xff1a;《理解ARM架構》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交給時間&#xff01; 目錄 &#x1f360;操作寄存器實現UART&#x1f35f;UART原理&#x1f35f;編程 &#x1f360;…

python——第十二天

內置模塊或者其他模塊學習方式&#xff1a; dir help os模塊負責程序與操作系統的交互&#xff0c;提供了訪問操作系統底層的接口&#xff1b;即os模塊提供了非常豐富的方法用來處理文件和目錄。 os&#xff1a; os.path 遍歷C盤代碼 import os from os import path def …

修改YOLOv5的模型結構第三彈

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制&#x1f680; 文章來源&#xff1a;K同學的學習圈子 文章目錄 任務任務拆解 開始修改C2模塊修改yolo.py修改模型配置文件 模型訓練 上次已…

【工具使用】Keil工具的使用——常用配置介紹

Keil調試具體教程學習 目錄 ???????Keil調試具體教程學習 常用功能總結 &#xff08;2&#xff09;目標設置&#xff08;Target&#xff09; ①設置晶振頻率 ②跨模塊優化選項 ③微庫選項 &#xff08;3&#xff09;輸出設置&#xff08;Output&#xff09; ①…

插入排序(形象類比)

最近在看riscv手冊的時候&#xff0c;里面有一段代碼是插入排序&#xff0c;但是單看代碼的時候有點迷&#xff0c;沒看懂咋操作的&#xff0c;后來又查資料復習了一下&#xff0c;最終才把代碼看明白&#xff0c;所以寫篇博客記錄一下。 插入排序像打撲克牌 這是我聽到過比較形…

list的總結

目錄 1.什么是list 1.1list 的優勢和劣勢 優勢&#xff1a; 劣勢&#xff1a; 2.構造函數 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍歷 4. list容量函數 4.1. empty() 4.2. siz…

語音合成綜述Speech Synthesis

一、語音合成概述 語音信號的產生分為兩個階段&#xff0c;信息編碼和生理控制。首先在大腦中出現某種想要表達的想法&#xff0c;然后由大腦將其編碼為具體的語言文字序列&#xff0c;及語音中可能存在的強調、重讀等韻律信息。經過語言的組織&#xff0c;大腦通過控制發音器…

正整數分解

題目編號&#xff1a;Exp08-Basic01&#xff0c;GJBook3-12-05 題目名稱&#xff1a;正整數分解 題目描述&#xff1a;正整數n&#xff0c;按第一項遞減的順序依次輸出其和等于n的所有不增的正整數和式。 輸入&#xff1a;一個正整數n&#xff08;0<n≤15&#xff09;。 …

qRT-PCR相對定量計算詳解qPCR相對定量計算方式——2^-(??Ct) deta t

做完轉錄組分析之后&#xff0c;一般都要求做qRT-PCR來驗證二代測序得到的轉錄本表達是否可靠。熒光定量PCR是一種相對表達定量的方法&#xff0c;他的計算方法有很多&#xff0c;常用的相對定量數據分析方法有雙標曲線法&#xff0c;ΔCt法&#xff0c;2^-ΔΔCt法(Livak法)&a…

順序表基本操作全面解析

文章目錄 1.線性表2.順序表分類2.1 靜態順序表2.2 動態順序表 3. 順序表各接口實現1. 定義結構體(Seqlist)2. 結構體初始化(SLInit)3.檢查容量 (SLCheckCapacity)4.打印數據 (SLPrintf)5.插入操作5.1 從數據頭部插入(SLPushFront)5.2 從數據尾部插入(SLPushBack)5.3 從任意下標…

100天精通Python(可視化篇)——第106天:Pyecharts繪制多種炫酷桑基圖參數說明+代碼實戰

文章目錄 專欄導讀一、桑基圖介紹1. 桑基圖是什么?2. 桑基圖應用場景?二、桑基圖配置選項1. 導包2. add函數3. 分層設置三、桑基圖基礎1. 普通桑基圖2. 修改標簽位置3. 修改節點布局方向4、月度開支桑基圖書籍推薦專欄導讀 ????本文已收錄于《100天精通Python從入門到就…

線性表之順序表

文章目錄 主要內容一.順序表1.插入操作&#xff1a;代碼如下&#xff08;示例&#xff09;: 2.刪除操作&#xff1a;代碼如下&#xff08;示例&#xff09;: 3.按值查找&#xff1a;代碼如下&#xff08;示例&#xff09;: 總結 主要內容 順序表 預備知識 定義&#xff1a; 線…

GEE:基于 Landst 遙感數據計算的 kNDVI 下載 APP

作者&#xff1a;CSDN _養樂多_ 本文記錄了在Google Earth Engine&#xff08;GEE&#xff09;平臺中&#xff0c;使用 Landsat 遙感數據計算并且下載 kNDVI 的應用 APP 鏈接&#xff0c;并介紹該 APP 的使用方法和步驟。該APP可以為用戶展示 NDVI 和 kNDVI 的遙感影像&#…

抽象類, 接口, Object類 ---java

目錄 一. 抽象類 1.1 抽象類概念 1.2 抽象類語法 1.3 抽象類特性 1.4 抽象類的作用 二. 接口 2.1 接口的概念 2.2 語法規則 2.3 接口的使用 2.4 接口間的繼承 2.5 抽象類和接口的區別 三. Object類 3.1 toString() 方法 3.2 對象比較equals()方法 3.3 hash…

免費獲取GPT-4的五種工具

不可否認&#xff0c;由OpenAI帶來的GPT-4已是全球最受歡迎的、功能最強大的大語言模型&#xff08;LLM&#xff09;之一。大多數人都需要使用ChatGPT Plus的訂閱服務去訪問GPT-4。為此&#xff0c;他們通常需要每月支付20美元。那么問題來了&#xff0c;如果您不想每月有這筆支…

基于JavaWeb+SpringBoot+Vue醫院管理系統小程序的設計和實現

基于JavaWebSpringBootVue醫院管理系統小程序的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄[Java 源碼獲取 源碼獲取入口 Lun文目錄 目錄 1系統概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系統設計思想 1 2相關技術 2 2.1微信小程序 2 2.2 …

井蓋位移傳感器廠家批發,守護井蓋安全

窨井蓋廣泛分布于城市街道&#xff0c;其管理效果直接反映了城市治理的現代化程度。根據住房和城鄉建設部發布的《關于進一步加強城市窨井蓋安全管理的通知》&#xff0c;全國各地需加強窨井蓋的安全管理。作為市政基礎設施的一個重要的組成部分&#xff0c;井蓋的管理工作不僅…

去水印網站哪個好?試試這個去水印軟件!

在工作中&#xff0c;我們都曾遇到過圖片水印的困擾。在眾多的在線水印去除工具中&#xff0c;雖然選擇看似豐富&#xff0c;但往往很難找到完全滿足我們需求的那一個。有些工具操作過程繁復&#xff0c;有些工具在處理復雜水印時力不從心&#xff0c;還有些工具在去水印的過程…

【Spring日志】

一.日志作用 1.定位和發現問題 這是日志的主要用途,通過查看日志,我們可以定位問題發生的位置,從而快速的發現問題,分析問題. 2.系統監控 監控幾乎是一個成熟系統的標配,我們可以通過日志記錄這個系統的運行狀態,比如記錄方法的響應時間,響應狀態,通過設置不同的規則,超過閾值就…

【MyBatis <if> <where>標簽介紹】

文章目錄 <if>標簽<where>標簽<foreach>標簽 <if>標簽 <if>標簽允許我們在SQL語句中添加條件判斷。 <if test"condition"><!-- 當條件滿足時執行的SQL語句 --> </if>其中&#xff0c;test屬性是一個表達式&#x…