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

您的位置:首頁技術(shù)文章
文章詳情頁

如何理解Vue中computed和watch的區(qū)別

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

我們在 Vue 項(xiàng)目中多多少少都會有用到 computed 和 watch,這兩個看似都能實(shí)現(xiàn)對數(shù)據(jù)的監(jiān)聽,但還是有區(qū)別。所以以下通過一個小栗子來理解一下這兩者的區(qū)別。

computed 計算屬性

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

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

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

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

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

如何理解Vue中computed和watch的區(qū)別

因?yàn)槿绻?computed 屬性值是一個函數(shù),那么默認(rèn)會走get方法,必須要有一個返回值,函數(shù)的返回值就是屬性的屬性值。計算屬性定義了 fullName 并返回對應(yīng)的結(jié)果給這個變量,變量不可被重復(fù)定義和賦值。

在官方文檔中,還強(qiáng)調(diào)了 computed 一個重要的特點(diǎn),就是 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 內(nèi)定義的 function 只執(zhí)行一次,僅當(dāng)初始化顯示或者相關(guān)的 data、props 等屬性數(shù)據(jù)發(fā)生變化的時候調(diào)用;

而 computed 屬性值默認(rèn)會緩存計算結(jié)果,計算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的;

只有當(dāng) computed 屬性被使用后,才會執(zhí)行 computed 的代碼,在重復(fù)的調(diào)用中,只要依賴數(shù)據(jù)不變,直接取緩存中的計算結(jié)果。只有依賴型數(shù)據(jù)發(fā)生改變,computed 才會重新計算。

計算屬性的高級:

在computed 中的屬性都有一個 get 和一個set方法,當(dāng)數(shù)據(jù)變化時,調(diào)用 set 方法。下面我們通過計算屬性的 getter/setter 方法來實(shí)現(xiàn)對屬性數(shù)據(jù)的顯示和監(jiān)視,即雙向綁定。

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

通過 vm 對象的 $watch() 或 watch 配置來監(jiān)聽 Vue 實(shí)例上的屬性變化,或某些特定數(shù)據(jù)的變化,然后執(zhí)行某些具體的業(yè)務(wù)邏輯操作。當(dāng)屬性變化時,回調(diào)函數(shù)自動調(diào)用,在函數(shù)內(nèi)部進(jìn)行計算。其可以監(jiān)聽的數(shù)據(jù)來源:data,props,computed 內(nèi)的數(shù)據(jù)。

以上示例通過 watch 來實(shí)現(xiàn):

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

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

在使用時選擇 watch 還是 computed,還有一個參考點(diǎn)就是官網(wǎng)說的:當(dāng)需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,watch方式是最有用的。所以 watch 一定是支持異步的。

上面僅限監(jiān)聽簡單數(shù)據(jù)類型,監(jiān)聽復(fù)雜數(shù)據(jù)類型就需要用到深度監(jiān)聽 deep。

deep:為了發(fā)現(xiàn)對象內(nèi)部值的變化,可以在選項(xiàng)參數(shù)中指定 deep: true。注意監(jiān)聽數(shù)組的變更不需要這么做。

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

以上打印結(jié)果:

如何理解Vue中computed和watch的區(qū)別

打印出來的 newVal 和 oldVal 值是一樣的,所以深度監(jiān)聽雖然可以監(jiān)聽到對象的變化,但是無法監(jiān)聽到對象里面哪個具體屬性的變化。這是因?yàn)樗鼈兊囊弥赶蛲粋€對象/數(shù)組。Vue 不會保留變更之前值的副本。[ vm.$watch 深度監(jiān)聽 ]

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

1. 直接監(jiān)聽對象的屬性

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

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

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

watch和computed都是以Vue的依賴追蹤機(jī)制為基礎(chǔ)的,當(dāng)某一個依賴型數(shù)據(jù)(依賴型數(shù)據(jù):簡單理解即放在 data 等對象下的實(shí)例數(shù)據(jù))發(fā)生變化的時候,所有依賴這個數(shù)據(jù)的相關(guān)數(shù)據(jù)會自動發(fā)生變化,即自動調(diào)用相關(guān)的函數(shù),來實(shí)現(xiàn)數(shù)據(jù)的變動。

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

應(yīng)用場景:

computed:用于處理復(fù)雜的邏輯運(yùn)算;一個數(shù)據(jù)受一個或多個數(shù)據(jù)影響;用來處理watch和methods無法處理的,或處理起來不方便的情況。例如處理模板中的復(fù)雜表達(dá)式、購物車?yán)锩娴纳唐窋?shù)量和總金額之間的變化關(guān)系等。

watch:用來處理當(dāng)一個屬性發(fā)生變化時,需要執(zhí)行某些具體的業(yè)務(wù)邏輯操作,或要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作;一個數(shù)據(jù)改變影響多個數(shù)據(jù)。例如用來監(jiān)控路由、inpurt 輸入框值的特殊處理等。

區(qū)別:

computed

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

watch

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

以上就是如何理解Vue中computed和watch的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Vue的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品99精品一区二区三区∴| 国产高清一区| 亚洲精品字幕| 激情综合网站| 欧美日韩国产在线一区| 午夜久久tv| 中文字幕一区二区三区日韩精品| 四虎精品一区二区免费| 国产精品片aa在线观看| 成人高清一区| 国产在线日韩| 天堂va在线高清一区| 国产精品高潮呻吟久久久久| av在线最新| 精品国产乱码久久久久久樱花| 日韩欧美一区免费| 日韩在线卡一卡二| 国产精品亚洲欧美一级在线| 麻豆久久一区| 不卡中文字幕| 国产日韩1区| 日韩高清中文字幕一区二区| 另类中文字幕国产精品| 免费日韩精品中文字幕视频在线| 日本不卡高清视频| 国产粉嫩在线观看| 亚洲免费黄色| 久久一区视频| 久久久亚洲一区| 日韩成人a**站| 亚洲在线一区| 国产精品2023| 亚洲综合二区| 国产精品亚洲人成在99www| 欧美一区不卡| 国产精品激情| 久久青草久久| 美女黄网久久| 国产欧美视频在线| 国产综合色产| 国产毛片久久久| 国产99亚洲| 国产精品流白浆在线观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 精品一区欧美| 久久精品99国产精品| 蜜臀国产一区| 亚洲一级大片| 国产一区丝袜| 麻豆精品91| 一区免费在线| 久久免费影院| 欧美日韩国产欧| 视频一区二区中文字幕| 麻豆视频观看网址久久| 中国女人久久久| 麻豆国产精品777777在线| 亚洲少妇一区| 久久亚洲资源中文字| 人人精品人人爱| 久久中文精品| 欧美特黄一区| 国产精品免费大片| 日韩精品一级二级| 精品国产精品国产偷麻豆 | 国产精选久久| 亚洲精品国产偷自在线观看| 亚洲+小说+欧美+激情+另类| 亚洲欧洲一区二区天堂久久| 久久91导航| 国产精选在线| 老司机精品视频在线播放| 日韩在线成人| 免费成人av在线播放| 三上悠亚国产精品一区二区三区| 卡一卡二国产精品| 国产精品v日韩精品v欧美精品网站| 亚洲免费观看高清完整版在线观| 亚洲激情不卡| 亚洲女同中文字幕| 午夜久久免费观看| 国产99亚洲| 午夜精品成人av| 欧美13videosex性极品| 成年男女免费视频网站不卡| 国精品产品一区| 精品久久中文| 欧美aaaaaa午夜精品| 国产日韩中文在线中文字幕| 日本午夜精品久久久| 日韩免费精品| 欧美亚洲网站| 国产精品对白| 韩国一区二区三区视频| 精品美女视频| 日本免费久久| 精品中文字幕一区二区三区av| 激情中国色综合| 麻豆视频在线观看免费网站黄| 中文字幕在线看片| 久久中文亚洲字幕| 欧美日韩国产高清| 蜜芽一区二区三区| 欧美精品福利| 国际精品欧美精品| 成人福利视频| 精品中文字幕一区二区三区av| 午夜久久黄色| 婷婷亚洲精品| 久久精品一本| 久久久久久久久久久妇女 | 92国产精品| 欧美综合另类| 亚洲在线久久| 免费在线亚洲欧美| а√天堂中文在线资源8| 99久久99久久精品国产片果冰 | 国产一二在线播放| 欧美 日韩 国产精品免费观看| 亚洲永久字幕| 欧美精品中文| 日韩中文在线电影| 另类av一区二区| 五月亚洲婷婷 | 99久久久久久中文字幕一区| 美女网站一区| 91成人在线精品视频| 精品成av人一区二区三区 | 国产一区二区三区久久 | 久久蜜桃资源一区二区老牛| 91成人精品视频| 婷婷综合一区| 亚洲人成在线网站| 首页国产欧美日韩丝袜| 免费在线观看一区| 亚洲精华国产欧美| 国产麻豆精品| 久久九九电影| 日韩不卡一二三区| 国产成人精品一区二区三区免费| 久久精品影视| 欧美精品福利| 黄色日韩在线| 久久不见久久见国语| 国产综合婷婷| 国产三级一区| 免费视频亚洲| 欧美激情视频一区二区三区免费 | 免费的成人av| 美女av在线免费看| 国产精品外国| 久久中文字幕导航| 美女久久一区| 日本高清不卡一区二区三区视频 | 91精品国产调教在线观看| 日韩高清一区在线| 国产伊人精品| 国产一区二区三区视频在线| 只有精品亚洲| 三级小说欧洲区亚洲区| 日韩激情中文字幕| 国产一区日韩欧美| 九九久久国产| 婷婷亚洲成人| 国产亚洲高清视频| 六月婷婷综合| 麻豆国产精品| 综合色一区二区| 欧美91福利在线观看| 精品免费视频| 国产精品色在线网站| 蜜臀va亚洲va欧美va天堂| 久久蜜桃精品| 精品无人区麻豆乱码久久久| 中文字幕一区二区精品区| 99久久精品网站| 波多野结衣久久精品| 国产精品一区二区三区美女| 久久在线电影| 成人日韩在线| 久久久久久一区二区| 国产精品久av福利在线观看| 亚洲图片久久| 爽好久久久欧美精品| 欧美在线影院| re久久精品视频| 91精品一区国产高清在线gif | 国产精品久久久久毛片大屁完整版| 视频在线观看国产精品| 欧美影院三区| 久久久久网站| 美女尤物国产一区| 国产精品第一| 久久99精品久久久久久园产越南| 午夜久久av| 日韩欧美三区| 日韩精品1区2区3区| 日韩欧美在线精品| 奇米色欧美一区二区三区| 日本视频中文字幕一区二区三区|