Vue中的computed和watch的區(qū)別

最近依舊在面試,故會把面試時遇到的一些問題整理下來供自己查閱。因為之前的項目用vue用的不多,所以在被問到computed和watch的區(qū)別的時候挺懵的,查了一些資料,稍作整理,供以后查閱。

計算屬性(computed)

官方對于計算屬性的解釋是:

對于任何復(fù)雜邏輯,你都應(yīng)當(dāng)使用計算屬性。計算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。只在相關(guān)響應(yīng)式依賴發(fā)生改變時它們才會重新求值。

直接引用官方文檔的例子:

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 計算屬性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 實例
      return this.message.split('').reverse().join('')
    }
  }
});

偵聽器(watch)

Vue 通過 watch 選項提供了一個更通用的方法,來響應(yīng)數(shù)據(jù)的變化。當(dāng)需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,這個方式是最有用的。

官方文檔很清晰地表達(dá)了,watch是在執(zhí)行一些復(fù)雜的操作時候使用的。更直觀的例子,我們可以看下官方對computed和watch的對比:
以下代碼是針對fullname這個屬性的監(jiān)聽:

  <div id="demo">{{ fullName }}</div>

使用watch:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})

使用computed:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

可以明顯的看出,在執(zhí)行簡單的計算操作時,computed比watch更簡潔易讀。

總結(jié):

1.如果一個數(shù)據(jù)依賴于其他數(shù)據(jù)的簡易計算處理的,那么使用computed比較合適。
2.如果需要在某個數(shù)據(jù)變化時做一些事情,使用watch來觀察這個數(shù)據(jù)變化

參考資料:

  1. Vue -- 計算屬性和偵聽器
  2. Vue中的 computed 和 watch的區(qū)別
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本介紹 話不多說,一個最基本的例子如下: Vue中我們不需要在template里面直接計算{{this.firs...
    指尖跳動閱讀 3,260評論 0 1
  • 關(guān)心你的一切,只是希望彌補我不在你身邊的這一段時光的遺憾,希望你能提起某個人某件事的時候告訴你,我知道這一切。就算...
    路人233閱讀 274評論 0 0
  • """######################################################...
    SkTj閱讀 1,344評論 0 2
  • 最近幾天總是想寫,總是寫不了。最明顯的頭緒就是非善類的六月。腳痛,疑似痛風(fēng)的腳痛。就算是現(xiàn)在捧著手機的我,腳踝也還...
    ssilmm閱讀 141評論 0 1
  • 來到簡書寫文已經(jīng)八個月零兩天,寫了十二萬多字,要感謝一個人。 1、 她叫齊帆齊,是一名簡書簽約作者,屌絲逆襲的簽約...
    上善若水止于至善閱讀 627評論 8 17

友情鏈接更多精彩內(nèi)容