理解vue中$watch使用

2021-03-02 前端精髓

偵聽組件實例上的響應式 property 或函數計算結果的變化。回調函數得到的參數為新值和舊值。

我們只能將頂層的 data、prop 或 computed property 名作為字符串傳遞。對於更複雜的表達式,用一個函數取代。

假設 data 定義的數據如下:

data() {  return {    a: 1,    b: 2,    c: {      d: 3,      e: 4    }  }}

單個的頂層屬性,第一個參數是字符串,第二個參數是函數。

created() {    this.$watch('a', (newVal, oldVal) => {      })}

包含嵌套的對象裡面的屬性,兩個參數都必須是函數形式。

created() {    this.$watch(    () => this.c.d,    (newVal, oldVal) => {          }  )}

如果使用的是 vue3 請使用上面的寫法,如果使用的是 vue2 可以使用簡單的鍵路徑。

created() {    this.$watch('c.d', (newVal, oldVal) => {      })}

對於更複雜的表達式,用一個函數取代。

created() {    this.$watch(                () => this.a + this.b,    (newVal, oldVal) => {          }  )}

當偵聽的值是一個對象或者數組時,對其屬性或元素的任何更改都不會觸發偵聽器,因為它們引用相同的對象/數組:

const app = Vue.createApp({  data() {    return {      article: {        text: 'Vue is awesome!'      },      comments: ['Indeed!', 'I agree']    }  },  created() {    this.$watch('article', () => {      console.log('Article changed!')    })
this.$watch('comments', () => { console.log('Comments changed!') }) }, methods: { changeArticleText() { this.article.text = 'Vue 3 is awesome' }, addComment() { this.comments.push('New comment') },
changeWholeArticle() { this.article = { text: 'Vue 3 is awesome' } }, clearComments() { this.comments = [] } }})

為了發現對象內部值的變化,可以在選項參數中指定 deep: true。在選項參數中指定 immediate: true 將立即以表達式的當前值觸發回調:

created() {    this.$watch('c', (newVal, oldVal) => {      }, { deep: true, immediate: true })}

注意:在變更 (不是替換) 對象或數組時,舊值將與新值相同,因為它們的引用指向同一個對象/數組。Vue 不會保留變更之前值的副本。



$watch 返回一個取消偵聽函數,用來停止觸發回調。

命令式的 $watch API,和 options API 中的 watch 選項類似,但是和 composition API 的 watch 還是有點區別的。因為後者可以使用數組來同時偵聽多個源:

watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {  })

需要在數據變化時執行異步或開銷較大的操作時,請使用 watch 處理。

相關焦點

  • 詳解Vue中的computed和watch
    之後在模板中就可以像使用message一樣使用reverseMessage。Vue中的watch Vue中的watch又名為偵聽屬性,它主要用於偵聽數據的變化,在數據發生變化的時候執行一些操作。這兩者選擇和使用沒有對錯之分,只是希望能更好的使用,而不是濫用。5.
  • 12 種使用 Vue 的優秀做法
    同樣,只要我們在整個項目中保持一致,可以使用其中任何一種。BaseButton.vue BaseIcon.vue BaseHeading.vue 該命名約定的目的是使基本組件按字母順序分組在文件系統中。
  • 如何在uni-app項目中使用vue屬性監測表達式
    工具微信開發者工具HBuilderX技術vueuni-appJavaScriptCSS3wxml在vue的數據/選項中,有個watch屬性,可以用來監測表達式的操作數。創建uni-app項目,並新建頁面文件sys2、打開新建的頁面文件,在template標籤中,插入三個數字類型輸入框,並綁定變量
  • vue3中的watch 上
    vue3 中的watch接受三個參數:參數1:監聽的數據源 (可以為一個ref或者一個函數) 參數2:回調函數 (newValue, oldValue
  • Vue數據監聽watch和計算屬性computed
    watch監聽單個,computed監聽多個當watch監聽的是複雜數據類型的時候需要做深度監聽
  • [VUE基礎]vue2中emit的使用姿勢
    …args:附加參數,會被拋出,由上述綁定的方法接收使用。文檔說:它是一個觸發當前實例上的事件。附加參數都會傳給監聽器回調。 子組件使用this.$emit()向父組件傳值。首先必須在父組件中引用子組件,然後實現傳值。
  • Vue3.0新特性
    注意:setup方法中無法使用this在setup 方法中定義的函數,變量需要使用return導出才能在template中使用通過refAPI定義的變量,是一個對象,操作值得時候需要操作value使用reactive可以將變量及函數整理在一個對象中;然後在setup中導出data,zai template中使用data.count調用;當使用es6
  • 面試官:聊聊對Vue.js框架的理解
    那怎麼理解漸進式呢?漸進式含義:強制主張最少。漸進式概念Vue.js包含了聲明式渲染、組件化系統、客戶端路由、大規模狀態管理、構建工具、數據持久化、跨平臺支持等,但在實際開發中,並沒有強制要求開發者之後某一特定功能,而是根據需求逐漸擴展。
  • vue中組件的使用(下)
    vue中組件的使用(上)中,小編總結了組件的分類和註冊、組件的data選項、組件的props選項的使用對此我們可以使用vue提供的API接口$emit實現,實現步驟如下:使用$emit在子組件中自定義觸發事件在父組件中監聽事件,執行對應方法針對以上步驟,代碼是這樣的:
  • Vue中mixin怎麼理解?
    Vue中mixin怎麼理解?定義: mixin是為了讓可復用的功能靈活的混入到當前組件中,混合的對象可以包含任意組件選項(生命周期,指令之類等等), mixin翻譯過來叫混合,高級的詞彙可以叫插件入侵簡單使用// 定義一個混合對象const myMixin = {  created: function () {    this.hello
  • vue題
    漸進式的含義,我的理解是:沒有多做職責之外的事。12、vue.js的兩個核心是什麼?數據驅動和組件化13、vue中 key 值的作用使用key來給每個節點做一個唯一標識key的作用主要是為了高效的更新虛擬DOM。
  • 前端VUE知識點鞏固
    一個vue的生命周期執行順序,邏輯,執行次數vue每個組件都是獨立的,每個組件都有一個屬於它的生命周期
  • 快速掌握 Vue3 全家桶開發
    接下來,我們將詳細的解讀一下 Vue3 中常見的核心方法!,故無需使用 .value;在 setup 函數中使用這些變量則不需要加 .valuereactive:一般給引用類型的值設置為響應式的值<template> <p>我的名字:{{state.name}}</p> <p>我的年齡:{{state.age}}</p></
  • Vue中watch的詳細用法
    1.基本用法下面代碼是watch的一種基本用法:watch去監聽單個值是否發生改變
  • 實現最精簡的響應式系統來學習Vue的data、computed、watch源碼
    預覽源碼地址(ts):https://github.com/sl1673495/vue-reactive源碼地址(js)https://github.com/sl1673495/vue-reactive/tree/js-version
  • 初步認識vue.js框架的使用
    vue.js框架是幹什麼的Vue.js 是一個JavaScriptMVVM庫,是一套構建用戶界面的漸進式框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。如何使用vue.js1.下載 vue.min.js 並用 <script> 標籤引入。
  • Vue的安裝及使用快速入門
    vue是一個JavaMVVM庫,是一套用於構建用戶界面的漸進式框架,是初創項目的首選前端框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。它是輕量級的,它有很多獨立的功能或庫,我們會根據我們的項目來選用vue的一些功能。它提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。
  • 怎麼使用vue中的實例屬性vm.$data
    ElementJavaScript在vue中,vm.那麼,這個實例屬性怎麼使用?1、打開HBuilderX工具,創建vue項目,然後在src/components新建vue文件DataAtrr.vue新建vue文件DataAtrr.vue2、使用命令npm i element-ui -S安裝Element,然後打開main.js文件,引入Element的樣式和模塊
  • Vue-使用vue-video-player組件
    在實際開發過程中會有添加視頻的需求在vue項目中添加視頻可以使用vue-video-player組件來實現實現步驟:1.安裝在控制臺輸入: npm install vue-video-player –s
  • 如何在vue框架項目中使用echarts並製作柱狀圖
    cnpm install --global vue-cli2、接著使用命令:vue init webpack wanm,創建一個基於webpack模板的新項目運行項目:npm run dev4、如果要在vue框架項目中使用echarts,需要安裝echartsnpm install echarts