最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中computed和watch有哪些區(qū)別

 更新時(shí)間:2020年12月19日 08:51:14   作者:lucky_qi  
這篇文章主要介紹了Vue中computed和watch有哪些區(qū)別,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下

計(jì)算屬性computed:

  • 支持緩存,只有依賴數(shù)據(jù)發(fā)生改變,才會(huì)重新進(jìn)行計(jì)算
  • 不支持異步,當(dāng)computed內(nèi)有異步操作時(shí)無(wú)效,無(wú)法監(jiān)聽(tīng)數(shù)據(jù)的變化
  • computed 屬性值會(huì)默認(rèn)走緩存,計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的,也就是基于data中聲明過(guò)或者父組件傳遞的props中的數(shù)據(jù)通過(guò)計(jì)算得到的值
  • 如果一個(gè)屬性是由其他屬性計(jì)算而來(lái)的,這個(gè)屬性依賴其他屬性,是一個(gè)多對(duì)一或者一對(duì)一,一般用computed
  • 如果computed屬性屬性值是函數(shù),那么默認(rèn)會(huì)走get方法;函數(shù)的返回值就是屬性的屬性值;在computed中的,屬性都有一個(gè)get和一個(gè)set方法,當(dāng)數(shù)據(jù)變化時(shí),調(diào)用set方法。
var vm = new Vue({
 el: '#app',
 data: {
  message: 'hello'
 },
 template: `
 <div> <p>我是原始值: "{{ message }}"</p> <p>我是計(jì)算屬性的值: "{{ computedMessage}}"</p> // computed 在 DOM 里直接使用不需要調(diào)用 </div> `,
 computed: {
  // 計(jì)算屬性的 getter   computedMessage: function () {
   // `this` 指向 vm 實(shí)例    return this.message.split('').reverse().join('')
  }
 }
})

結(jié)果:

我是原始值: "Hello"
我是計(jì)算屬性的值: "olleH"

如果不使用計(jì)算屬性,那么 message.split('').reverse().join('') 就會(huì)直接寫到 template 里,那么在模版中放入太多聲明式的邏輯會(huì)讓模板本身過(guò)重,尤其當(dāng)在頁(yè)面中使用大量復(fù)雜的邏輯表達(dá)式處理數(shù)據(jù)時(shí),會(huì)對(duì)頁(yè)面的可維護(hù)性造成很大的影響

而且計(jì)算屬性如果依賴不變的話,它就會(huì)變成緩存,computed 的值就不會(huì)重新計(jì)算

所以,如果數(shù)據(jù)要通過(guò)復(fù)雜邏輯來(lái)得出結(jié)果,那么就推薦使用計(jì)算屬性

偵聽(tīng)屬性watch

  • 不支持緩存,數(shù)據(jù)變,直接會(huì)觸發(fā)相應(yīng)的操作。
  • watch支持異步;監(jiān)聽(tīng)的函數(shù)接收兩個(gè)參數(shù),第一個(gè)參數(shù)是最新的值;第二個(gè)參數(shù)是輸入之前的值;
  • 當(dāng)一個(gè)屬性發(fā)生變化時(shí),需要執(zhí)行對(duì)應(yīng)的操作;一對(duì)多;
  • 監(jiān)聽(tīng)數(shù)據(jù)必須是data中聲明過(guò)或者父組件傳遞過(guò)來(lái)的props中的數(shù)據(jù),當(dāng)數(shù)據(jù)變化時(shí),觸發(fā)其他操作,函數(shù)有兩個(gè)參數(shù):
new Vue({
 data: {
  n: 0,
  obj: {
   a: "a"
  }
 },
 template: `
 <div> <button @click="n += 1">n+1</button> <button @click="obj.a += 'hi'">obj.a + 'hi'</button> <button @click="obj = {a:'a'}">obj = 新對(duì)象</button> </div> `,
 watch: {
  n() {
   console.log("n 變了");
  },
  obj:{
   handler: function (val, oldVal) { 
   console.log("obj 變了")
  },
   deep: true // 該屬性設(shè)定在任何被偵聽(tīng)的對(duì)象的 property 改變時(shí)都要執(zhí)行 handler 的回調(diào),不論其被嵌套多深   },
  "obj.a":{
   handler: function (val, oldVal) { 
   console.log("obj.a 變了")
  },
   immediate: true // 該屬性設(shè)定該回調(diào)將會(huì)在偵聽(tīng)開始之后被立即調(diào)用   }
 }
}).$mount("#app");

不應(yīng)該使用箭頭函數(shù)來(lái)定義 watcher 函數(shù),因?yàn)榧^函數(shù)沒(méi)有 this,它的 this 會(huì)繼承它的父級(jí)函數(shù),但是它的父級(jí)函數(shù)是 window,導(dǎo)致箭頭函數(shù)的 this 指向 window,而不是 Vue 實(shí)例

  • deep 控制是否要看這個(gè)對(duì)象里面的屬性變化
  • immediate 控制是否在第一次渲染是執(zhí)行這個(gè)函數(shù)

vm.$watch() 的用法和 watch 回調(diào)類似

  • vm.$watch('data屬性名', fn, {deep: .., immediate: ..})
vm.$watch("n", function(val, newVal){
   console.log("n 變了");
},{deep: true, immediate: true})

總結(jié)

  • 如果一個(gè)數(shù)據(jù)需要經(jīng)過(guò)復(fù)雜計(jì)算就用 computed
  • 如果一個(gè)數(shù)據(jù)需要被監(jiān)聽(tīng)并且對(duì)數(shù)據(jù)做一些操作就用 watch

以上就是Vue中computed和watch有哪些區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Vue中computed和watch的區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue中使用jwt-decode解析token的方法

    vue中使用jwt-decode解析token的方法

    這篇文章主要介紹了vue中使用jwt-decode解析token,文末給大家補(bǔ)充介紹了vue通過(guò)jwt-decode解析token獲取需要的數(shù)據(jù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 探討Vue.js的組件和模板

    探討Vue.js的組件和模板

    指令是Vue.js中一個(gè)重要的特性, 主要提供了一種機(jī)制將數(shù)據(jù)的變化映射為DOM行為。下面通過(guò)本文給大家分享Vue.js的組件和模板,需要的朋友參考下吧
    2017-10-10
  • vue組件系列之TagsInput詳解

    vue組件系列之TagsInput詳解

    TagsInput 是一種可編輯的輸入框,通過(guò)回車或者分號(hào)來(lái)分割每個(gè)標(biāo)簽,用回退鍵刪除上一個(gè)標(biāo)簽。這篇文章主要介紹了vue組件TagsInput的相關(guān)知識(shí),需要的朋友可以參考下
    2020-05-05
  • 在Vue3中實(shí)現(xiàn)動(dòng)態(tài)路由的示例代碼

    在Vue3中實(shí)現(xiàn)動(dòng)態(tài)路由的示例代碼

    Vue3中的動(dòng)態(tài)路由是一種高級(jí)功能,它允許你在URL中包含變量,這些變量可以在組件內(nèi)部通過(guò)$route.params對(duì)象訪問(wèn),動(dòng)態(tài)路由通常用于構(gòu)建可配置性強(qiáng)、更具靈活性的應(yīng)用,本文詳細(xì)介紹了如何在vue3中實(shí)現(xiàn)動(dòng)態(tài)路由,需要的朋友可以參考下
    2024-07-07
  • Map.vue基于百度地圖組件重構(gòu)筆記分享

    Map.vue基于百度地圖組件重構(gòu)筆記分享

    這篇文章主要為大家分享了Map.vue基于百度地圖組件重構(gòu)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 解決vue安裝less報(bào)錯(cuò)Failed to compile with 1 errors的問(wèn)題

    解決vue安裝less報(bào)錯(cuò)Failed to compile with 1 errors的問(wèn)題

    這篇文章主要介紹了解決vue安裝less報(bào)錯(cuò)Failed to compile with 1 errors的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • vue-cli-service不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件問(wèn)題

    vue-cli-service不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件問(wèn)題

    在Vue項(xiàng)目構(gòu)建過(guò)程中,如果遇到無(wú)法識(shí)別'vue-cli-service'命令的錯(cuò)誤提示,通常是因?yàn)闆](méi)有全局安裝vue-cli,解決這個(gè)問(wèn)題的步驟主要包括:首先檢查Vue版本,如果未安裝則先安裝Vue;其次全局安裝vue-cli;若在安裝過(guò)程中遇到cnpm命令找不到的情況
    2024-10-10
  • vue3.0 vue-router4.0打包后頁(yè)面空白的解決方法

    vue3.0 vue-router4.0打包后頁(yè)面空白的解決方法

    本文主要介紹了vue3.0 vue-router4.0打包后頁(yè)面空白的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 解決vue請(qǐng)求接口第一次成功,第二次失敗問(wèn)題

    解決vue請(qǐng)求接口第一次成功,第二次失敗問(wèn)題

    這篇文章主要介紹了解決vue請(qǐng)求接口第一次成功,第二次失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Vite打包優(yōu)化之縮小打包體積實(shí)現(xiàn)詳解

    Vite打包優(yōu)化之縮小打包體積實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了使用Vite縮小打包體積如何實(shí)現(xiàn)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論

宾阳县| 曲阳县| 威远县| 康定县| 德清县| 名山县| 沛县| 方城县| 曲松县| 内江市| 东台市| 岐山县| 鄂州市| 塔城市| 新兴县| 马关县| 广河县| 榆社县| 大连市| 依安县| 淮阳县| 彭山县| 镇远县| 平凉市| 罗江县| 泽库县| 咸阳市| 蓬安县| 廉江市| 灌南县| 高邮市| 澎湖县| 榆社县| 普兰县| 永福县| 将乐县| 都兰县| 睢宁县| 密云县| 洛扎县| 乾安县|