日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何理解Vue中computed和watch的區別

瀏覽:12日期:2022-09-30 08:22:42
概述

我們在 Vue 項目中多多少少都會有用到 computed 和 watch,這兩個看似都能實現對數據的監聽,但還是有區別。所以以下通過一個小栗子來理解一下這兩者的區別。

computed 計算屬性

計算屬性基于 data 中聲明過或者父組件傳遞的 props 中的數據通過計算得到的一個新值,這個新值只會根據已知值的變化而變化,簡言之:這個屬性依賴其他屬性,由其他屬性計算而來的。

<p>姓名:{{ fullName }}</p>... ...data: { firstName: ’David’, lastName: ’Beckham’},computed: { fullName: function() { //方法的返回值作為屬性值 return this.firstName + ’ ’ + this.lastName }}

在 computed 屬性對象中定義計算屬性的方法,和取data對象里的數據屬性一樣以屬性訪問的形式調用,即在頁面中使用 {{ 方法名 }} 來顯示計算的結果。

注:計算屬性 fullName 不能在 data 中定義,而計算屬性值的相關已知值在data中;

如果 fullName 在 data 中定義了會報錯如下圖:

如何理解Vue中computed和watch的區別

因為如果 computed 屬性值是一個函數,那么默認會走get方法,必須要有一個返回值,函數的返回值就是屬性的屬性值。計算屬性定義了 fullName 并返回對應的結果給這個變量,變量不可被重復定義和賦值。

在官方文檔中,還強調了 computed 一個重要的特點,就是 computed 帶有緩存功能。比如我在頁面中多次顯示 fullName:

<p>姓名:{{ fullName }}</p><p>姓名:{{ fullName }}</p><p>姓名:{{ fullName }}</p><p>姓名:{{ fullName }}</p><p>姓名:{{ fullName }}</p>... ... computed: { fullName: function () { console.log(’computed’) // 在控制臺只打印了一次 return this.firstName + ’ ’ + this.lastName }}

我們知道 computed 內定義的 function 只執行一次,僅當初始化顯示或者相關的 data、props 等屬性數據發生變化的時候調用;

而 computed 屬性值默認會緩存計算結果,計算屬性是基于它們的響應式依賴進行緩存的;

只有當 computed 屬性被使用后,才會執行 computed 的代碼,在重復的調用中,只要依賴數據不變,直接取緩存中的計算結果。只有依賴型數據發生改變,computed 才會重新計算。

計算屬性的高級:

在computed 中的屬性都有一個 get 和一個set方法,當數據變化時,調用 set 方法。下面我們通過計算屬性的 getter/setter 方法來實現對屬性數據的顯示和監視,即雙向綁定。

computed: { fullName: {get() { //讀取當前屬性值的回調,根據相關的數據計算并返回當前屬性的值 return this.firstName + ’ ’ + this.lastName},set(val) { // 當屬性值發生改變時回調,更新相關的屬性數據,val就是fullName的最新屬性值 const names = val ? val.split(’ ’) : []; this.firstName = names[0] this.lastName = names[1]} }}watch 監聽屬性

通過 vm 對象的 $watch() 或 watch 配置來監聽 Vue 實例上的屬性變化,或某些特定數據的變化,然后執行某些具體的業務邏輯操作。當屬性變化時,回調函數自動調用,在函數內部進行計算。其可以監聽的數據來源:data,props,computed 內的數據。

以上示例通過 watch 來實現:

watch: { // 監聽 data 中的 firstName,如果發生了變化,就把變化的值給 data 中的 fullName, val 就是 firstName 的最新值 firstName: function(val) { this.fullName = val + ’ ’ + this.lastName }, lastName: function(val) {this.fullName = this.firstName + ’ ’ + val } }// 由上可以看出 watch 要監聽兩個數據,而且代碼是同類型的重復的,所以相比用 computed 更簡潔

注:監聽函數有兩個參數,第一個參數是最新的值,第二個參數是輸入之前的值,順序一定是新值,舊值,如果只寫一個參數,那就是最新屬性值。

在使用時選擇 watch 還是 computed,還有一個參考點就是官網說的:當需要在數據變化時執行異步或開銷較大的操作時,watch方式是最有用的。所以 watch 一定是支持異步的。

上面僅限監聽簡單數據類型,監聽復雜數據類型就需要用到深度監聽 deep。

deep:為了發現對象內部值的變化,可以在選項參數中指定 deep: true。注意監聽數組的變更不需要這么做。

data: { fullName: {firstName: ’David’,lastName: ’Beckham’ }},watch: { fullName: {handler(newVal, oldVal) { console.log(newVal); console.log(oldVal);},deep: true }}

以上打印結果:

如何理解Vue中computed和watch的區別

打印出來的 newVal 和 oldVal 值是一樣的,所以深度監聽雖然可以監聽到對象的變化,但是無法監聽到對象里面哪個具體屬性的變化。這是因為它們的引用指向同一個對象/數組。Vue 不會保留變更之前值的副本。[ vm.$watch 深度監聽 ]

若果要監聽對象的單個屬性的變化,有兩種方法:

1. 直接監聽對象的屬性

watch:{ fullName.firstName: function(newVal,oldVal){console.log(newVal,oldVal); }}

2. 與 computed 屬性配合使用,computed 返回想要監聽的屬性值,watch 用來監聽

computed: { firstNameChange() { return this.fullName.firstName }},watch: { firstNameChange() {console.log(this.fullName) }}總結

watch和computed都是以Vue的依賴追蹤機制為基礎的,當某一個依賴型數據(依賴型數據:簡單理解即放在 data 等對象下的實例數據)發生變化的時候,所有依賴這個數據的相關數據會自動發生變化,即自動調用相關的函數,來實現數據的變動。

當依賴的值變化時,在watch中,是可以做一些復雜的操作的,而computed中的依賴,僅僅是一個值依賴于另一個值,是值上的依賴。

應用場景:

computed:用于處理復雜的邏輯運算;一個數據受一個或多個數據影響;用來處理watch和methods無法處理的,或處理起來不方便的情況。例如處理模板中的復雜表達式、購物車里面的商品數量和總金額之間的變化關系等。

watch:用來處理當一個屬性發生變化時,需要執行某些具體的業務邏輯操作,或要在數據變化時執行異步或開銷較大的操作;一個數據改變影響多個數據。例如用來監控路由、inpurt 輸入框值的特殊處理等。

區別:

computed

初始化顯示或者相關的 data、props 等屬性數據發生變化的時候調用; 計算屬性不在 data 中,它是基于data 或 props 中的數據通過計算得到的一個新值,這個新值根據已知值的變化而變化; 在 computed 屬性對象中定義計算屬性的方法,和取data對象里的數據屬性一樣,以屬性訪問的形式調用; 如果 computed 屬性值是函數,那么默認會走 get 方法,必須要有一個返回值,函數的返回值就是屬性的屬性值; computed 屬性值默認會緩存計算結果,在重復的調用中,只要依賴數據不變,直接取緩存中的計算結果,只有依賴型數據發生改變,computed 才會重新計算; 在computed中的,屬性都有一個 get 和一個 set 方法,當數據變化時,調用 set 方法。

watch

主要用來監聽某些特定數據的變化,從而進行某些具體的業務邏輯操作,可以看作是 computed 和 methods 的結合體; 可以監聽的數據來源:data,props,computed內的數據; watch支持異步; 不支持緩存,監聽的數據改變,直接會觸發相應的操作; 監聽函數有兩個參數,第一個參數是最新的值,第二個參數是輸入之前的值,順序一定是新值,舊值。

以上就是如何理解Vue中computed和watch的區別的詳細內容,更多關于Vue的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品尤物| 日韩av一级片| 欧美日韩一区二区高清| 国产一区二区高清| 欧美一级精品| 青青久久av| 91免费精品| 97视频热人人精品免费| 国产成人精品一区二区三区在线| 里番精品3d一二三区| 亚洲日本国产| 免播放器亚洲| 亚洲天堂av资源在线观看| 尤物精品在线| 99热精品在线| 视频一区中文字幕| 蜜臀久久99精品久久久画质超高清| 夜夜嗨av一区二区三区网站四季av| 婷婷综合在线| 亚洲综合丁香| 免费观看在线综合色| 欧美专区在线| 亚洲精品进入| 亚洲精品福利| 天堂va欧美ⅴa亚洲va一国产| 午夜在线视频观看日韩17c| 成人av二区| 亚洲一卡久久| 中文精品电影| 91大神在线观看线路一区| 欧美精品影院| 麻豆精品视频在线观看免费| 久久97视频| 日韩成人高清| 欧美午夜不卡影院在线观看完整版免费| 在线亚洲激情| 91精品尤物| 91亚洲国产| 免费视频亚洲| 亚洲日产av中文字幕| 香蕉久久一区| 欧美aaaaaa午夜精品| 91亚洲国产| 亚洲午夜电影| 亚洲精品在线二区| 国产福利资源一区| 日韩福利一区| 蜜桃久久av| 国产精品亚洲人成在99www| 成人日韩av| 欧美日韩国产综合网| 日韩av字幕| 国产在线看片免费视频在线观看| 在线一区免费| 国产精品一区二区三区www| 美女国产一区二区三区| 欧美精品高清| 免费人成在线不卡| 欧美黄页在线免费观看| 久久中文视频| 日本亚洲最大的色成网站www | 日韩美女精品| 久久精品国产福利| 国产一区二区中文| 亚洲精品自拍| 日韩免费高清| 亚洲精品护士| 日本欧美国产| 免费在线成人网| 精品久久不卡| 欧美日韩少妇| 久久精品资源| 好看的av在线不卡观看| 国产精品欧美在线观看| 性欧美xxxx免费岛国不卡电影| 色狠狠一区二区三区| 中文字幕在线视频网站| 综合干狼人综合首页| 国产精品99一区二区三区| 欧美国产91| 麻豆精品新av中文字幕| 9国产精品视频| 国产精品片aa在线观看| 日韩一级不卡| 91亚洲国产成人久久精品| 亚洲人www| 欧美在线观看视频一区| 国产精品传媒麻豆hd| 国产精品腿扒开做爽爽爽挤奶网站| 欧美精品导航| 蜜臀久久99精品久久久久宅男 | 亚洲+小说+欧美+激情+另类| yellow在线观看网址| 青草国产精品久久久久久| 国产精品97| 精品国产乱码久久久久久樱花| 久久午夜精品一区二区| 秋霞国产精品| 国产黄色一区| 日本不卡视频一二三区| 欧美日韩激情| 国产高潮在线| 麻豆精品在线播放| 五月亚洲婷婷 | 99re国产精品| 日韩免费一区| 精品久久久网| 国产欧美一区二区三区精品观看| 中国女人久久久| 久久精品国内一区二区三区水蜜桃| 日韩精品一级| 三级在线观看一区二区| 99久久久久国产精品| 高清av一区| 国产精品密蕾丝视频下载| 亚洲1区在线| 美国欧美日韩国产在线播放| 999久久久免费精品国产| 久久麻豆视频| 国产女人18毛片水真多18精品| 日本在线观看不卡视频| 蜜臀久久99精品久久久久宅男 | 天堂av在线| 精品日韩在线| 欧美亚洲一区二区三区| 天海翼精品一区二区三区| 视频一区视频二区中文字幕| 日韩一区二区免费看| 国产综合精品一区| 中文另类视频| 日韩专区精品| 不卡福利视频| 日韩综合精品| 91精品国产成人观看| 日韩精品诱惑一区?区三区| 国产一区二区三区亚洲综合| 麻豆传媒一区二区三区| 精品国产精品久久一区免费式| 国产精品久久久一区二区| 日本亚洲不卡| 奇米777国产一区国产二区| 亚洲人www| 亚洲精品自拍| 欧美日韩亚洲国产精品| 欧美日韩一视频区二区| 国产免费av一区二区三区| 国产精品亚洲人成在99www | 亚洲精品中文字幕99999| 中文字幕中文字幕精品| 综合干狼人综合首页| 奇米亚洲欧美| 麻豆高清免费国产一区| 精品深夜福利视频| 欧美精品不卡| 国内自拍视频一区二区三区| av高清不卡| 五月天激情综合网| 老牛影视一区二区三区| 欧美一区精品| 国产91欧美| 欧美片网站免费| 免费观看亚洲| 99亚洲精品| 成人日韩精品| 亚洲欧洲av| 国产精品成人一区二区网站软件| 黑人精品一区| 亚洲一区二区三区高清| 四虎成人精品一区二区免费网站| 国产精品一站二站| 精品亚洲美女网站| 蜜臀av在线播放一区二区三区| 日本va欧美va欧美va精品| 在线一区免费| 免费成人性网站| 日韩欧美不卡| 成人av动漫在线观看| 精品一区二区三区四区五区| 日韩专区精品| 欧美日韩精品一本二本三本 | 日韩午夜av| 免费国产自久久久久三四区久久 | 青草综合视频| 国产日产精品_国产精品毛片| 久久婷婷丁香| 久久wwww| 日韩中文字幕一区二区三区| 久久三级福利| 久久最新视频| 亚洲我射av| 国产精品美女午夜爽爽| 亚洲黄色网址| 久久av超碰| 午夜久久av | 国产精品qvod| 欧美在线看片| 欧美精品一线| 一区二区精品伦理...| 久久夜色精品| 欧美一级二级三级视频|