Vue 3 自學筆記 - watch 的使用

更新 發佈閱讀 4 分鐘

目前的話使用的是 Options API 的寫法,watch 是一個蠻好用的監聽器,他不僅可以監聽 data、computed 的資料,也可以監聽 vue-router 的 url 等等,現在先來介紹一下他的基本應用:

他的基本結構:

watch: {
要監聽的目標() {
  // 處理方法
}
}

基本範例:

export default {
data() {
return {
   text: ''
  }
},
watch: {
text(newValue, oldValue) {
    if (newValue.length >= 10) {
     console.log(newValue)
   }
}
}
}

這段的內容是 定義一個名為 text 的資料,當 text 的長度超過 10 字元的時候就將他打印出來。在 watch 裡面可以看到代入了 newValue 和 oldValue 兩個參數,他可以分開來監控該變數發生變化時的新值和舊值,以此可以用來寫不同要使用到的邏輯。

當然,如果不代參數的話也是可以的,那就是只能接收到目前最新的值,要怎麼監控主要還是要看你現在寫的專案要用到哪一種的邏輯。

如果今天你要監聽的資料是 物件(Object) 的話要怎麼辦呢?用上面的基本監聽沒辦法成功獲得想要的值。

那是因為他指向的地址是同一地址,watch 覺得你選的值沒有變化,解決的方法有兩種:

我們想假定一個資料,下面的話都使用這個資料

data () {
return {
  product: {
   name: '產品',
   price: 30
  }
}
}

方法一:直接監聽你要變化的值

watch: {
'product.name'(newValue, oldValue) {
console.log(newValue, oldValue)
}
}

但是這又有一個問題,我們要用的資料是 物件(Object),代表了我要使用裡面的全部資料,難道要我把每一個值都寫一遍嗎?

這個倒是不用,讓我們來進入深度監聽的方法

方法二:深度監聽

注意:深度監聽的前提是監聽的目標是一個 物件(Object)

watch: {
product: {
handler(newValue, oldValue) {
   console.log(newValue, oldValue)
  },
  deep: true
}
}

深度監聽的話會把原本監聽的對象從函式格式轉成物件格式,同時加上 handler 和 deep 來開啟深度監聽

handler: 控制器

deep: 確認是不是屬於 深層監聽

這個時候你會發現深度監聽裡面的新值和舊值內容一樣的問題,原因的話一樣是因為他們引用的地址一樣,如果想要顯示不一樣的結果做分開處理的話,可以在computed 裡面做深拷貝,再改成監聽 computed 的變數就可以喽!


留言
avatar-img
圈圈的沙龍
0會員
1內容數
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在 Vue.js 中,watch 是用來監控數據變化並執行副作用的工具。副作用指的是函數對外部狀態的變更,例如更新 DOM、進行網絡請求或修改全局變量。watch 允許我們在數據變化時自動響應,這對於處理異步操作和更新狀態非常有用。它也支持深層監聽和清理功能,能夠應對複雜的副作用場景。
Thumbnail
在 Vue.js 中,watch 是用來監控數據變化並執行副作用的工具。副作用指的是函數對外部狀態的變更,例如更新 DOM、進行網絡請求或修改全局變量。watch 允許我們在數據變化時自動響應,這對於處理異步操作和更新狀態非常有用。它也支持深層監聽和清理功能,能夠應對複雜的副作用場景。
Thumbnail
Vue.js 基本介紹 Vue.js 是個漸進式 JavaScript 框架 (Progressive JavaScript Framework),用於建立用戶界面。被設計成逐步增強的框架,可輕鬆整合到現有項目中,或從頭構建新的應用程序。 Vue.js 的特點 1. 輕量級:Vue.js 的核心庫非
Thumbnail
Vue.js 基本介紹 Vue.js 是個漸進式 JavaScript 框架 (Progressive JavaScript Framework),用於建立用戶界面。被設計成逐步增強的框架,可輕鬆整合到現有項目中,或從頭構建新的應用程序。 Vue.js 的特點 1. 輕量級:Vue.js 的核心庫非
Thumbnail
有個線上課程學生在科技產業擔任資料分析相關職務,前陣子跟我分享他在公司寫數據分析相關信件/報告的時候總是很痛苦,不知道要怎麼寫出完整句子,問我要怎麼辦,剛好我最近在看一些科技產業相關主題的分析報告...
Thumbnail
有個線上課程學生在科技產業擔任資料分析相關職務,前陣子跟我分享他在公司寫數據分析相關信件/報告的時候總是很痛苦,不知道要怎麼寫出完整句子,問我要怎麼辦,剛好我最近在看一些科技產業相關主題的分析報告...
Thumbnail
這次的篇章主要在介紹狀態的可變性,透過約束來限制狀態,避免隨意更改狀態導致錯誤的合約出現,如果對於Solidity開發有興趣的朋友不妨參考「📚 更多關於Solidity的文章請看這裡…」,讓我們一起動動手學習開發智能合約吧! 我們都知道狀態在智能合約中扮演著非常重要的角色,經過什麼事件之後變化為什
Thumbnail
這次的篇章主要在介紹狀態的可變性,透過約束來限制狀態,避免隨意更改狀態導致錯誤的合約出現,如果對於Solidity開發有興趣的朋友不妨參考「📚 更多關於Solidity的文章請看這裡…」,讓我們一起動動手學習開發智能合約吧! 我們都知道狀態在智能合約中扮演著非常重要的角色,經過什麼事件之後變化為什
Thumbnail
自學筆記 - Vue3 watch 的應用
Thumbnail
自學筆記 - Vue3 watch 的應用
Thumbnail
不知不覺寫到第七篇了!QUERY 真的有好多好多東西可以說 (ノ>ω<)ノ QUERY 其實還能處理有日期、時間的資料,而且語法也相當容易,和我們之前就看過的聚集函式很像。你如果會了之前的聚集函式,相信這次處理日期和時間也會對你來說很簡單!
Thumbnail
不知不覺寫到第七篇了!QUERY 真的有好多好多東西可以說 (ノ>ω<)ノ QUERY 其實還能處理有日期、時間的資料,而且語法也相當容易,和我們之前就看過的聚集函式很像。你如果會了之前的聚集函式,相信這次處理日期和時間也會對你來說很簡單!
Thumbnail
了解 Vuex 特性和運用
Thumbnail
了解 Vuex 特性和運用
Thumbnail
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
Thumbnail
本文章主要介紹保護程式的方法及封裝方法的唯讀屬性。
Thumbnail
本系列文為節選第 468 期 JavaScript Weekly 文章的讀後整理心得。 本文為「下」,收錄內容: Vue 3.0 的設計概念 TypeScript 的 const assertion Preact 華麗復活 阿 Svelte 不是很邱?
Thumbnail
本系列文為節選第 468 期 JavaScript Weekly 文章的讀後整理心得。 本文為「下」,收錄內容: Vue 3.0 的設計概念 TypeScript 的 const assertion Preact 華麗復活 阿 Svelte 不是很邱?
Thumbnail
本篇將會說明關於狀態的設定,狀態經常使用在戰鬥中,比如說中毒、盲目、混亂等等負面狀態,也有攻擊力上升、速度加快等等增益狀態。
Thumbnail
本篇將會說明關於狀態的設定,狀態經常使用在戰鬥中,比如說中毒、盲目、混亂等等負面狀態,也有攻擊力上升、速度加快等等增益狀態。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News