vue裏的watch和computed

vue裏的watch和computedvue

vue裏的computed是什麼?
首先咱們明確computed的一個基本的定義
computed是用來監視本身定義的變量的
它不在在data裏面聲明(像普通變量同樣)而是直接在computed裏面進行定義緩存

那麼vue裏的watch和computed都是以vue的依賴追蹤機制爲基礎的
它們的任務:當某一個數據(咱們設定的監控的依賴數據)發生改變的時候,全部依賴這個數據的數據都會相應產生改變,而且是自動變化,這就是watch和computed的任務,而且也是他們和methods的區別,由於methods是用來定義函數的,它是須要手動調用的dom

import Vue from 'vue'
new Vue({
  el: '#root',
  template: `
    <div>
      <p>Name: {{name}}</p>
      <p>Name: {{getName()}}</p>
      <p>Number: {{number}}</p>
      <p><input type="text" v-model="number"/></p>
      <p>FirsName: <input type="text" v-model="firstName"/></p>
      <p>LaseName: <input type="text" v-model="lastName"/></p>
    </div>
  `,
  data: {
    firstName: 'Jokcy',
    lastName: 'Lou',
    number: 0
  },
  computed: {
    name () {
      console.log('new name')
      return `${this.firstName} ${this.lastName}`
    }
  },
  methods: {
    getName () {
      console.log('getName invoked')
      return `${this.firstName} ${this.lastName}`
    }
  }
})

當咱們改變 number 時,整個應用會從新渲染,vue 會被數據從新渲染到 dom 中。這時,若是咱們使用 getName 方法,隨着渲染,方法也會被調用,而 computed 不會從新進行計算,從而性能開銷比較小。當新的值須要大量計算才能獲得,緩存的意義就很是大。
若是 computed 所依賴的數據發生改變時,計算屬性纔會從新計算,並進行緩存;當改變其餘數據時,computed 屬性 並不會從新計算,從而提高性能。
當咱們拿到的值須要進行必定處理使用時,就可使用 computed。函數

watch和computed的區別性能

watch是監聽某個數據的變量,傾向於監聽完它後調用哪一個函數,一個數據影響多個其餘函數的調用
而computed傾向於計算後返回一個數據
而且data中能夠不聲明你要computed的被監視值,可是必須聲明你要watch的東西
而咱們多數用computed來處理使用watch和methods時沒法處理的數據this

相關文章
相關標籤/搜索