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

關(guān)于Vue的 watch、computed和methods的區(qū)別匯總

 更新時(shí)間:2021年11月05日 10:19:09   作者:蜜瓜  
這篇文章主要介紹關(guān)于Vue的 watch、computed和methods的區(qū)別,下面文章將圍繞Vue的 watch、computed和methods的續(xù)航管資料展開全文它們之間區(qū)別的內(nèi)容,需要的朋友可以參考一下,希望能幫助到大家

1 前言

創(chuàng)建一個(gè)Vue實(shí)例時(shí),可以傳入一個(gè)選項(xiàng)對(duì)象

const vm = new Vue({
  data: {
    msg: 'hello'
  },
  computed: {},
  methods: {},
  watch: {}
})

這個(gè)選項(xiàng)對(duì)象可以指定非常多的選項(xiàng)(或者說屬性),和數(shù)據(jù)相關(guān)的選項(xiàng)有:包括但不限于data、methods、computed、watch等等

其中methods、computed、watch都能通過函數(shù)來對(duì)數(shù)據(jù)進(jìn)行處理或作出響應(yīng),這三者有差異,但很容易混淆

2 基礎(chǔ)用法

script引入vue.js,下面的代碼都在如下html中運(yùn)行

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Methods</title>
    <!-- 引入 vue.js -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  </head>
  <body>
    
  </body>
  <script>
    
  </script>
</html>

2.1 methods 方法

methods選項(xiàng)中的定義的函數(shù)稱為方法,在Vue實(shí)例化的過程中,methods對(duì)象中的方法將被混入到Vue實(shí)例中,成為Vue實(shí)例的方法。可以直接通過Vue實(shí)例訪問這些方法

<body>
  <div id="example">
    <!-- 顯示:a:1 -->
    <p>a:{{ plus() }}</p> 
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#example",
    data: {
      a: 0,
    },
    methods: {
      plus: function () {
        return this.a + 1;
      },
    },
  });
  console.log(vm); // 查看控制臺(tái)輸出的vm,可以看到它有一個(gè)方法是:plus: ƒ (),⚠️注意是方法
  console.log(vm.plus()); // 直接通過vm實(shí)例訪問方法,輸出:1
</script>


需要主動(dòng)調(diào)用methods中的函數(shù)才能執(zhí)行,a的值改變并不能讓頁面中的<p>a:{{plus()}}</a>跟著更新

2.2 computed 計(jì)算屬性

computed選項(xiàng)中定義的函數(shù)稱為計(jì)算屬性,在Vue實(shí)例化的過程中,computed對(duì)象中的計(jì)算屬性將被混入到Vue實(shí)例中,成為Vue實(shí)例的同名屬性。

<body>
  <div id="example">
    <!-- 顯示:a:1 -->
    <p>a:{{ plus }}</p>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#example",
    data: {
      a: 0,
    },
    computed: {
      plus: function () {
        return this.a + 1;
      },
    },
  });
  console.log(vm); // // 查看控制臺(tái)輸出的vm,可以看到它有一個(gè)屬性是:plus:1,⚠️注意是屬性
</script>

乍一看好像computedmethods功能一樣,確實(shí)在這個(gè)例子中二者展示效果相同

事實(shí)上通過打印vm實(shí)例以及訪問方式已經(jīng)體現(xiàn)出二者的一個(gè)不同之處:

  • methods中的函數(shù)會(huì)成為vm的方法
  • computed中的函數(shù)經(jīng)過計(jì)算后會(huì)成為vm的同名屬性,屬性值為函數(shù)的計(jì)算結(jié)果,即返回值

另外,和方法不同的是,計(jì)算屬性能夠跟著它依賴的數(shù)據(jù)變化而進(jìn)行響應(yīng)式更新,即a變化時(shí),plus屬性也會(huì)更新

2.3 watch 偵聽器

watch選項(xiàng)中的鍵值對(duì)稱為偵聽器或者說監(jiān)聽屬性/監(jiān)聽屬性,鍵是需要觀察的表達(dá)式,值是對(duì)應(yīng)的回調(diào)函數(shù)(值還可以是其他形式,此處不展開)

Vue實(shí)例化的過程中,這些需要偵聽的變量會(huì)被記錄下來,當(dāng)這些變量發(fā)生變化的時(shí)候,對(duì)應(yīng)的回調(diào)函數(shù)就會(huì)執(zhí)行

<body>
  <div id="example">
    <!-- 顯示:a:1 -->
    <p>a:{{ a }}</p>
  </div>
</body>
<script>
  const vm = new Vue({
    el: "#example",
    data: {
      a: 0,
    },
    watch: {
      a: function () {
        console.log("a發(fā)生了變化"); // 因?yàn)閍的值變了,回調(diào)函數(shù)執(zhí)行
        console.log(this.a);
      },
    },
  });
  vm.a = 1; // 這里直接手動(dòng)改變a的值
</script>

3 三者的區(qū)別

3.1 方法 VS 計(jì)算屬性

除了2.2中已經(jīng)提到的兩點(diǎn)區(qū)別之外,還有最重要的區(qū)別是:

  • 計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的,即上文中的a發(fā)生變化時(shí),才會(huì)重新觸發(fā)求值函數(shù),否則多次調(diào)用都會(huì)從緩存中求值,這對(duì)開銷較大的計(jì)算來說非常有用,可以避免重復(fù)計(jì)算
  • 方法則是調(diào)用時(shí)總會(huì)重新執(zhí)行

下面用表格的形式對(duì)這兩者的區(qū)別進(jìn)行總結(jié):

methods computed
Vue實(shí)例化后成為vm實(shí)例的什么 成為vm實(shí)例上的方法 成為vm實(shí)例上的屬性
能否根據(jù)依賴的數(shù)據(jù)進(jìn)行響應(yīng)式更新 不能,需要主動(dòng)調(diào)用方法
能否緩存 不能,每次調(diào)用重新執(zhí)行 能,依賴的數(shù)據(jù)不變,會(huì)從緩存中取值

3.2 計(jì)算屬性 VS 偵聽器

  • 首先最明顯的區(qū)別,偵聽器的命名方式是固定的,想要監(jiān)聽誰,就和誰同名。而方法和計(jì)算屬性可任意命名
  • 其次,偵聽器無法主動(dòng)進(jìn)行訪問,而另外兩者都能主動(dòng)訪問
  • 計(jì)算屬性和偵聽器的使用場(chǎng)景:

如果某個(gè)值需要通過一個(gè)或多個(gè)數(shù)據(jù)計(jì)算得到,就使用計(jì)算屬性

偵聽屬性主要是監(jiān)聽某個(gè)值的變化,然后進(jìn)行需要的邏輯處理;此外當(dāng)需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),偵聽屬性就比較有用,具體例子可見vue文檔-偵聽器

到此這篇關(guān)于關(guān)于Vue的 watch、computedmethods的區(qū)別匯總的文章就介紹到這了,更多相關(guān)Vuewatch、computedmethods的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解swiper在vue中的應(yīng)用(以3.0為例)

    詳解swiper在vue中的應(yīng)用(以3.0為例)

    這篇文章主要介紹了詳解swiper在vue中的應(yīng)用(以3.0為例),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue實(shí)現(xiàn)登錄時(shí)圖形驗(yàn)證碼

    vue實(shí)現(xiàn)登錄時(shí)圖形驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)登錄時(shí)圖形驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • socket io與vue-cli的結(jié)合使用的示例代碼

    socket io與vue-cli的結(jié)合使用的示例代碼

    這篇文章主要介紹了socket io與vue-cli的結(jié)合使用的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • 優(yōu)選七個(gè)用于vue開發(fā)的JS庫(kù)

    優(yōu)選七個(gè)用于vue開發(fā)的JS庫(kù)

    這篇文章主要介紹了JavaScript優(yōu)選七個(gè)用于vue開發(fā)庫(kù),借助開源庫(kù)加速Vue項(xiàng)目的開發(fā)進(jìn)度是現(xiàn)代前端開發(fā)比較常見的方式,平常收集一些JavaScript庫(kù)介紹,在遇到需要的時(shí)候可以信手拈來
    2023-02-02
  • html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總

    html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總

    這篇文章主要介紹了html中創(chuàng)建并調(diào)用vue組件的幾種方法匯總,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-11-11
  • vue3項(xiàng)目中各個(gè)文件的作用詳細(xì)介紹

    vue3項(xiàng)目中各個(gè)文件的作用詳細(xì)介紹

    在Vue3項(xiàng)目中,通常會(huì)有以下一些常見的目錄和文件,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目中各個(gè)文件的作用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼

    Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼

    在element-ui中是為我們準(zhǔn)備好了可直接使用的單選與多選屬性的,本文主要介紹了Vue Element-UI中el-table實(shí)現(xiàn)單選的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • vue中動(dòng)態(tài)select的使用方法示例

    vue中動(dòng)態(tài)select的使用方法示例

    這篇文章主要介紹了vue中動(dòng)態(tài)select的使用方法,結(jié)合實(shí)例形式分析了vue.js使用動(dòng)態(tài)select創(chuàng)建下拉菜單相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Vuejs監(jiān)聽vuex中值的變化的方法示例

    Vuejs監(jiān)聽vuex中值的變化的方法示例

    這篇文章主要介紹了Vuejs監(jiān)聽vuex中值的變化的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Vue3組件傳參的多種方式小結(jié)

    Vue3組件傳參的多種方式小結(jié)

    這篇文章主要介紹 Vue3組件傳參的方式,包括父子組件、跨層級(jí)組件、兄弟組件的傳參,如父子組件通過屬性綁定和自定義事件雙向傳參,跨層級(jí)組件可利用 Provide/Inject 機(jī)制和 Pinia 狀態(tài)管理,兄弟組件可通過父組件中轉(zhuǎn)或 mitt 庫(kù)直接傳參,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

开阳县| 申扎县| 汕头市| 富源县| 灵川县| 简阳市| 萝北县| 惠水县| 承德市| 拜城县| 北票市| 化州市| 两当县| 佛学| 丰原市| 长泰县| 宝清县| 吉林市| 蒙阴县| 庄河市| 张家港市| 神农架林区| 永宁县| 广西| 新竹市| 汨罗市| 怀远县| 饶河县| 上林县| 瓦房店市| 民勤县| 呼伦贝尔市| 苍溪县| 旌德县| 行唐县| 武威市| 清徐县| 梓潼县| 内丘县| 自治县| 拜城县|