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

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

 更新時(shí)間:2023年04月26日 08:42:28   作者:葉落風(fēng)塵  
Vue中的computed和watch都可以監(jiān)聽數(shù)據(jù)變化,但computed主要用于計(jì)算派生屬性,而watch則用于監(jiān)聽特定數(shù)據(jù)變化并執(zhí)行回調(diào)函數(shù)。兩者使用時(shí)需要注意區(qū)別

vue computed 是如何實(shí)現(xiàn)的

Vue 的 computed 屬性實(shí)現(xiàn)了一個(gè)響應(yīng)式的計(jì)算屬性。當(dāng)計(jì)算屬性所依賴的響應(yīng)式變量發(fā)生改變時(shí),計(jì)算屬性會(huì)自動(dòng)重新計(jì)算其值。

Vue 在內(nèi)部通過使用 Object.defineProperty() 方法來(lái)實(shí)現(xiàn) computed 屬性。具體地說(shuō),Vue 創(chuàng)建一個(gè)新的計(jì)算屬性描述符對(duì)象,該對(duì)象包含 getset 方法,然后調(diào)用 Object.defineProperty() 方法將計(jì)算屬性綁定到 Vue 實(shí)例上。

get 方法中,Vue 會(huì)收集計(jì)算屬性所依賴的響應(yīng)式變量,并建立依賴關(guān)系圖。這樣,當(dāng)響應(yīng)式變量發(fā)生變化時(shí),Vue 就能夠知道哪些計(jì)算屬性需要重新計(jì)算。

set 方法中,Vue 可以執(zhí)行一些額外的邏輯,例如檢查計(jì)算屬性是否可以被設(shè)置。但通常情況下,set 方法是不需要的,因?yàn)橛?jì)算屬性是只讀的。

總之,Vue 的 computed 屬性利用了 JavaScript 中的屬性描述符和響應(yīng)式原理,來(lái)實(shí)現(xiàn)一個(gè)方便、高效、易用的計(jì)算屬性系統(tǒng)。

computed demo

下面是一個(gè)簡(jiǎn)單的 Vue Computed 的實(shí)現(xiàn)示例:

// 創(chuàng)建一個(gè) Vue 實(shí)例
const vm = new Vue({
  data: {
    firstName: 'John',
    lastName: 'Doe',
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName;
    },
  },
});
// 訪問計(jì)算屬性
console.log(vm.fullName); // "John Doe"

在上述示例中,Vue 實(shí)例 vm 中定義了一個(gè) data 對(duì)象和一個(gè) computed 對(duì)象。在 computed 對(duì)象中,我們定義了一個(gè)名為 fullName 的函數(shù),它返回 firstNamelastName 屬性的組合。

當(dāng)我們?cè)L問 vm.fullName 時(shí),Vue 會(huì)自動(dòng)調(diào)用 fullName 函數(shù),并將其結(jié)果緩存起來(lái)。如果后續(xù)訪問 vm.fullName,而且 firstNamelastName 沒有發(fā)生變化,Vue 將直接返回之前緩存的結(jié)果,而不會(huì)重新計(jì)算。

這就是 Vue Computed 的基本工作原理。通過定義一個(gè)計(jì)算屬性,你可以輕松地實(shí)現(xiàn)數(shù)據(jù)的計(jì)算和緩存。這樣做不僅可以提高性能,還可以使代碼更加簡(jiǎn)潔易讀。

vue的watch是如何實(shí)現(xiàn)的

Vue.js 的 watch 是通過使用 Object.defineProperty() 函數(shù)實(shí)現(xiàn)的。當(dāng)你在 Vue 實(shí)例上定義一個(gè) watch 時(shí),Vue 會(huì)將其作為一個(gè)屬性添加到實(shí)例對(duì)象中,并使用 Object.defineProperty() 將該屬性轉(zhuǎn)換為 getter/setter 形式。這樣,當(dāng)被監(jiān)控的屬性發(fā)生變化時(shí),Vue 就會(huì)調(diào)用對(duì)應(yīng)的回調(diào)函數(shù)以執(zhí)行相應(yīng)的操作。同時(shí),Vue 還提供了深度監(jiān)聽和立即觸發(fā)回調(diào)等

watch demo

以下是一個(gè)簡(jiǎn)單的 Vue 示例,演示如何使用watch來(lái)觀察數(shù)據(jù)的變化:

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        count: 0,
      };
    },
    methods: {
      increment() {
        this.count++;
      },
    },
    watch: {
      count(newVal, oldVal) {
        console.log(`count changed from ${oldVal} to ${newVal}`);
      },
    },
  };
</script>

該示例定義了一個(gè)名為count的響應(yīng)式數(shù)據(jù),并在模板中顯示它。還定義了一個(gè)increment方法,在點(diǎn)擊按鈕時(shí)將計(jì)數(shù)器遞增。此外,還定義了一個(gè)watch選項(xiàng),以便在數(shù)據(jù)變化時(shí)打印一條消息。

當(dāng)你在瀏覽器中運(yùn)行該示例時(shí),每次點(diǎn)擊“Increment”按鈕時(shí),Vue 都會(huì)檢測(cè)到count的值已更改,并且將調(diào)用watch選項(xiàng)中定義的函數(shù)。該函數(shù)輸出將類似于以下內(nèi)容:

count changed from 0 to 1
count changed from 1 to 2
count changed from 2 to 3
...

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

相關(guān)文章

  • Vue 動(dòng)態(tài)設(shè)置路由參數(shù)的案例分析

    Vue 動(dòng)態(tài)設(shè)置路由參數(shù)的案例分析

    這篇文章主要介紹了Vue 動(dòng)態(tài)設(shè)置路由參數(shù)的案例分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • ElementUI嵌套頁(yè)面及關(guān)聯(lián)增刪查改實(shí)現(xiàn)示例

    ElementUI嵌套頁(yè)面及關(guān)聯(lián)增刪查改實(shí)現(xiàn)示例

    本文主要介紹了ElementUI嵌套頁(yè)面及關(guān)聯(lián)增刪查改實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue項(xiàng)目實(shí)現(xiàn)左滑刪除功能(完整代碼)

    vue項(xiàng)目實(shí)現(xiàn)左滑刪除功能(完整代碼)

    最近在開發(fā)移動(dòng)端項(xiàng)目,通過向左滑動(dòng)出現(xiàn)刪除按鈕,點(diǎn)擊即可刪除,怎么實(shí)現(xiàn)這個(gè)功能呢,接下來(lái)小編給大家?guī)?lái)實(shí)例代碼幫助大家學(xué)習(xí)vue項(xiàng)目實(shí)現(xiàn)左滑刪除功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 淺析Vue中權(quán)限管理的實(shí)現(xiàn)

    淺析Vue中權(quán)限管理的實(shí)現(xiàn)

    在前端開發(fā)中,權(quán)限管理是一項(xiàng)至關(guān)重要的任務(wù),本教程將深入探討如何在?Vue.js?項(xiàng)目中實(shí)施權(quán)限管理,并詳細(xì)講解如何實(shí)現(xiàn)到按鈕級(jí)別的細(xì)粒度控制,希望對(duì)大家有所幫助
    2024-11-11
  • 基于Vue封裝實(shí)現(xiàn)全屏功能工具類

    基于Vue封裝實(shí)現(xiàn)全屏功能工具類

    在?Web?應(yīng)用程序中,有時(shí)需要為某些內(nèi)容提供全屏顯示的功能,本文將介紹如何使用?Vue.js?3?的?Composition?API?創(chuàng)建一個(gè)全屏功能的工具類,希望對(duì)大家有所幫助
    2024-03-03
  • vue組件通信的多種方法詳解

    vue組件通信的多種方法詳解

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • vue單個(gè)元素綁定多個(gè)事件問題(例如點(diǎn)擊綁定多個(gè)事件方法)

    vue單個(gè)元素綁定多個(gè)事件問題(例如點(diǎn)擊綁定多個(gè)事件方法)

    這篇文章主要介紹了vue單個(gè)元素綁定多個(gè)事件問題(例如點(diǎn)擊綁定多個(gè)事件方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • element-ui upload組件多文件上傳的示例代碼

    element-ui upload組件多文件上傳的示例代碼

    這篇文章主要介紹了element-ui upload組件多文件上傳的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-10-10
  • vue3響應(yīng)式對(duì)象的api超全實(shí)例詳解

    vue3響應(yīng)式對(duì)象的api超全實(shí)例詳解

    可以把數(shù)據(jù)變成響應(yīng)式api的方法叫做響應(yīng)式api,下面這篇文章主要給大家介紹了關(guān)于vue3響應(yīng)式對(duì)象api的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn)

    element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn)

    這篇文章主要介紹了element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-07-07

最新評(píng)論

习水县| 安吉县| 花垣县| 启东市| 许昌县| 赤水市| 尉犁县| 崇信县| 墨玉县| 砚山县| 德阳市| 晋江市| 清徐县| 尉犁县| 东阿县| 高碑店市| 北票市| 宣武区| 沐川县| 珲春市| 桓台县| 济宁市| 汨罗市| 湖口县| 囊谦县| 庆云县| 邢台市| 沂源县| 深水埗区| 宜君县| 盘锦市| 卫辉市| 合山市| 卓尼县| 东乌珠穆沁旗| 汉阴县| 邳州市| 常山县| 固镇县| 涡阳县| 柳林县|