亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue中computed屬性和watch,methods的區(qū)別

 更新時間:2023年05月08日 11:10:52   作者:zayyo  
本文主要介紹了Vue中computed屬性和watch,methods的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在Vue中,computed、watch和methods是處理響應式數(shù)據(jù)的三種方式。它們的主要區(qū)別在于計算方式、響應方式和使用場景。

computed

computed是一種計算屬性,它會根據(jù)所依賴的響應式數(shù)據(jù)自動計算出一個新的值,并且該計算結果會被緩存起來,只有當所依賴的數(shù)據(jù)發(fā)生變化時才會重新計算,也就是說, 當所依賴的數(shù)據(jù)沒有發(fā)生改變時, 多次訪問計算屬性它會立即返回之前緩存的計算結果, 而不會再次執(zhí)行computed中的函數(shù)。而且computed本質上是一個只讀屬性,它不會修改任何響應式數(shù)據(jù),只是根據(jù)所依賴的數(shù)據(jù)計算出一個新的值。

使用computed的好處在于它可以將復雜的計算邏輯封裝在一個屬性中,并且只有在需要時才會計算,并且在依賴數(shù)據(jù)沒有發(fā)生變化時只返回上一次的計算緩存值,從而提高了代碼的可讀性和性能。

computed: {
   get: function () { 
      return this.firstName + ' ' + this.lastName;// 必須要有return
  },
}

watch

watch是一種觀察者模式,它會在所觀察的響應式數(shù)據(jù)發(fā)生變化時執(zhí)行一個回調函數(shù),在回調中會傳入newVal和oldVal兩個參數(shù)。watch可以監(jiān)聽一個或多個響應式數(shù)據(jù),并可以執(zhí)行一些異步操作,例如發(fā)送網絡請求或者操作本地存儲等。

使用watch的好處在于它可以監(jiān)控數(shù)據(jù)的變化并執(zhí)行相應的操作。例如,我們可以使用watch來監(jiān)聽一個輸入框的變化,并根據(jù)輸入框的值發(fā)送網絡請求:

watch: {
  inputValue(newValue, oldValue) {
    // 根據(jù)輸入框的值發(fā)送網絡請求
    fetch('http://example.com/api?query=' + newValue)
      .then(response => response.json())
      .then(data => this.result = data);
  }
}

在這個例子中,當inputValue發(fā)生變化時,watch會自動執(zhí)行回調函數(shù),并根據(jù)輸入框的值發(fā)送網絡請求。

methods

methods是一個普通的JavaScript方法,它可以接收參數(shù)并且可以執(zhí)行任意的JavaScript代碼。methods不會自動響應數(shù)據(jù)變化,需要手動調用才能更新視圖。methods方法是每次調用, 都會執(zhí)行函數(shù)的, methods而且它不是響應式的。

使用methods的好處在于它可以執(zhí)行任意的JavaScript代碼,并且可以根據(jù)具體的需求傳入不同的參數(shù)。例如,我們可以使用methods來處理用戶的點擊事件:

methods: {
  handleClick(event) {
    // 處理用戶的點擊事件
    console.log('User clicked on', event.target);
  }
}

在這個例子中,當用戶點擊某個元素時,會調用handleClick方法,并將事件對象作為參數(shù)傳入。

歸納三者不同點

methods,watch和computed都是以函數(shù)為基礎的,但各自卻都不同;

1、methods

不存在緩存,執(zhí)行一次運行一次,執(zhí)行n次,運行n次

2、computed

使用場景:當頁面中有某些數(shù)據(jù)依賴其他數(shù)據(jù)進行變動的時候,可以使用計算屬性
計算屬性 computed 是基于data中數(shù)據(jù)進行處理的,data數(shù)據(jù)變化,他也跟著變化
當data中數(shù)據(jù)沒有發(fā)生改變時,我們調用computed中函數(shù)n次,只會進行緩存(執(zhí)行一次)
每個計算屬性都包含兩個set、get 屬性
<div>{{get}} </div> //調用時候,直接寫上函數(shù)名即可

computed: {
   get: function () { //這里不適合寫 get(),語法規(guī)定
     return this.firstName + ' ' + this.lastName;// 必須要有return
  },
}

3、watch

使用場景:數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作,可以隨時修改狀態(tài)的變化
watch:類似于監(jiān)聽機制+事件機制。
在大部分情況下我們都會使用computed,但如果要在數(shù)據(jù)變化的同時進行異步操作或者是比較大的開銷,那么watch為最佳選擇。watch為一個對象,鍵是需要觀察的表達式,值是對應回調函數(shù)。值也可以是方法名,或者包含選項的對象。
// 這里直接用 v-model 來綁定,不需要添加 change 事件

<input type="text" v-model="name" />  {{tip}}
  data() {
    return {
      name: "",
      tip: ""
    };
  },
  methods: {
    checkName(value) {
      var arg = this;
      setTimeout(() => {
        if (value == "aa") {
          arg.tip = "用戶名已存在";
        } else {
          arg.tip = "用戶名可以使用";
        }
      }, 1000);
    }
  },
  watch: {// 數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作
    name(value) {
      this.checkName(value);
      this.tip = "正在驗證......";
    }
  }

watch的高級用法

上面的watch方法是當改變值時候,才會觸發(fā)監(jiān)聽事件,但是我們想剛進入頁面時候,就觸發(fā)監(jiān)聽事件,就要用handler()方法
1,handler():當頁面剛進入時,自動綁定watch事件,不需要進行觸發(fā)

watch: {// 頁面加載時,就自動觸發(fā)此事件
  name:{
    handler(new){
       this.checkName(value);
       this.tip = "正在驗證......";
    }
  }
}

2,immediate屬性:布爾值
immediate:true:首次加載就監(jiān)聽數(shù)據(jù)變化
immediate:false:只有發(fā)生改變才監(jiān)聽

watch: {// 頁面加載時,就自動觸發(fā)此事件
  name:{
    handler(new){
       this.checkName(value);
       this.tip = "正在驗證......";
    },
     immediate: true 
  }
}

3,deep:true;當需要監(jiān)聽一個對象的改變時,普通的watch方法無法監(jiān)聽到對象內部屬性的改變,此時就需要deep屬性對對象進行深度監(jiān)聽。

data() {
  return {
      name: {
          'fristname': 'a',
          'lastname': 'a'
      },
      nameCount:0
  }
},
watch: {
  name: {
      handler(newVal) {
          this.name++
      },
  deep: true
  }    
}

設置deep:true則可以監(jiān)聽到name的變化,此時會給name的所有屬性都加上這個監(jiān)聽器,當對象屬性較多時,每個屬性值的變化都會執(zhí)行handler。
如果只需要監(jiān)聽對象中的一個屬性值,可以字符串的形式監(jiān)聽對象屬性:

watch: {
  'name.first': {
      handler(newVal) {
          this.name++
      },
  deep: true
  }    
}

到此這篇關于Vue中computed屬性和watch,methods的區(qū)別的文章就介紹到這了,更多相關Vue computed屬性和watch,methods內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue3如何解決各場景l(fā)oading過度(避免白屏尷尬!)

    vue3如何解決各場景l(fā)oading過度(避免白屏尷尬!)

    在開發(fā)的過程中點擊提交按鈕,或者是一些其它場景總會遇到loading加載,下面這篇文章主要給大家介紹了關于vue3如何解決各場景l(fā)oading過度的相關資料,避免白屏尷尬,需要的朋友可以參考下
    2023-03-03
  • vue如何實現(xiàn)垂直居中

    vue如何實現(xiàn)垂直居中

    這篇文章主要介紹了vue如何實現(xiàn)垂直居中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Element Steps步驟條的使用方法

    Element Steps步驟條的使用方法

    這篇文章主要介紹了Element Steps步驟條的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • vue+elementui+vuex+sessionStorage實現(xiàn)歷史標簽菜單的示例代碼

    vue+elementui+vuex+sessionStorage實現(xiàn)歷史標簽菜單的示例代碼

    本文主要介紹了vue+elementui+vuex+sessionStorage實現(xiàn)歷史標簽菜單的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vue第三方庫中存在擴展運算符報錯問題的解決方案

    vue第三方庫中存在擴展運算符報錯問題的解決方案

    這篇文章主要介紹了vue第三方庫中存在擴展運算符報錯問題,本文給大家分享解決方案,通過結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 分享一個基于Ace的Markdown編輯器

    分享一個基于Ace的Markdown編輯器

    相信開發(fā)中或多或少都會有使用md的時候。那么一個簡易的md編輯器顯得尤為重要,如果想要在自己的項目中添加一個md編輯器,那么不妨來看看這篇文章
    2021-10-10
  • vue.js template模板的使用(仿餓了么布局)

    vue.js template模板的使用(仿餓了么布局)

    這篇文章主要介紹了vue.js template模板的使用,主要是模仿餓了么布局,用到了4個組件,分別是header.vue,goods.vue,ratings.vue,seller.vue,感興趣的朋友跟隨腳本之家小編一起看看實現(xiàn)代碼
    2018-08-08
  • vue如何實現(xiàn)二進制流文件導出excel

    vue如何實現(xiàn)二進制流文件導出excel

    這篇文章主要介紹了vue如何實現(xiàn)二進制流文件導出excel,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue cli2.0單頁面title修改方法

    vue cli2.0單頁面title修改方法

    這篇文章主要介紹了vue cli2.0單頁面title修改方法,非常不錯,具有一定的參考借鑒,需要的朋友可以參考下
    2018-06-06
  • vue3使用ref獲取dom結果為'null'的原因詳析

    vue3使用ref獲取dom結果為'null'的原因詳析

    這篇文章主要給大家介紹了關于vue3使用ref獲取dom結果為'null'的原因詳析,ref是Vue3中一個非常重要的功能,它可以用來獲取DOM節(jié)點,從而實現(xiàn)對DOM節(jié)點的操作,需要的朋友可以參考下
    2023-07-07

最新評論