這篇文章帶大家認識Vue中的computed 和 watch,介紹一下computed 和 watch的差別,希望對大家有幫助。
一、computed
1、用途:計算出來的屬性就是計算屬性
2、計算屬性的好處:它可以讓一些是根據其他屬性計算而來的屬性變成一個屬性
#computed有一個依賴快取,如果computed的依賴屬性沒有變化,那麼computed就不會重新計算。如果一個數據依賴其他數據,那麼把這個數據設計成 computed。 【相關推薦:《vue.js教學》】
範例(使用者名稱展示):
Vue.config.productionTip = false; new Vue({ data: { user: { email: "jade@qq.com", nickname: "jade", phone: "18810661088" } }, computed: { displayName: { get() { const user = this.user; return user.nickname || user.email || user.phone; }, set(value) { console.log(value); this.user.nickname = value; } } }, // DRY don't repeat yourself // 不如用 computed 来计算 displayName template: ` <div> {{displayName}} <div> {{displayName}} <button @click="add">set</button> </div> </div> `, methods: { add() { console.log("add"); this.displayName = "圆圆"; } } }).$mount("#app");
3、快取:
如果依賴的屬性沒有變化,就不會重新計算getter/setter
預設不會做緩存,Vue做了特殊處理
如何快取?可參考以下範例:
二、watch(監聽/偵聽)
#1、用途:當資料變更時,執行函數,watch是完美實作歷史功能的一個函數(方法)
範例(撤銷):
import Vue from "vue/dist/vue.js"; Vue.config.productionTip = false; new Vue({ data: { n: 0, history: [], inUndoMode: false }, watch: { n: function(newValue, oldValue) { console.log(this.inUndoMode); if (!this.inUndoMode) { this.history.push({ from: oldValue, to: newValue }); } } }, // 不如用 computed 来计算 displayName template: ` <div> {{n}} <hr /> <button @click="add1">+1</button> <button @click="add2">+2</button> <button @click="minus1">-1</button> <button @click="minus2">-2</button> <hr/> <button @click="undo">撤销</button> <hr/> {{history}} </div> `, methods: { add1() { this.n += 1; }, add2() { this.n += 2; }, minus1() { this.n -= 1; }, minus2() { this.n -= 2; }, undo() { const last = this.history.pop(); this.inUndoMode = true; console.log("ha" + this.inUndoMode); const old = last.from; this.n = old; // watch n 的函数会异步调用 this.$nextTick(() => { this.inUndoMode = false; }); } } }).$mount("#app");
加了immediate: true
,一次渲染的時候會觸發watch
Vue.config.productionTip = false; new Vue({ data: { n: 0, obj: { a: "a" } }, template: ` <div> <button @click="n += 1">n+1</button> <button @click="obj.a += 'hi'">obj.a + 'hi'</button> <button @click="obj = {a:'a'}">obj = 新对象</button> </div> `, watch: { n() { console.log("n 变了"); }, obj:{ handler(){ console.log("obj 变了"); }, deep:true }, "obj.a": function() { console.log("obj.a 变了"); } } }).$mount("#app");
- 語法1:
上箭頭函數的外層的函數是全域作用域,全域作用域的this就是全域物件window/global,所以你無法在這裡取得this.n/this.xxx,所以,watch裡面是絕對不能用箭頭函數的
- 文法2: ##
vm.$watch('xxx',fn,{deep:...,immediate:...})watch前面加$這樣的寫法是為了避免和一個叫watch的data名稱重複2、
deep:true是做什麼的?
object.a變了,請問
object#算不算也變了
如果需要答案是【也變了】,就用
deep:true如果需要答案是【沒有變】,就用
deep:false
deep就是往不往裡面去看,去深入的看,
true就是深入進入看,預設是
false(只看表層的位址)。
obj的位址,而且要比較裡面任何一個資料變了,都要認為是
obj變了。
- computed
:就是計算屬性的意思
- watch
:就是監聽的意思
- watch
支援非同步程式碼而
computed不行
#computed這個值在呼叫的時候,不需要加括號,它會根據依賴自動緩存,就是說如果依賴不變,這個
computed的值就不會再計算。
watch它有兩個選項,第一個是
immediate,表示在第一次執行時要渲染這個函數;另一個是
deep ,意思是如果我們要監聽一個對象,是否要看它裡面屬性的變化。
- 如果一個數據依賴其他數據,那麼把這個數據設計成
computed
;
- 如果你需要在某個資料變化時做一些事情,使用
watch
來觀察這個資料的變化。
computed和
watch的差別。
程式設計入門! !
以上是認識Vue中的computed 和 watch,聊聊它們的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。

Vue.js是一種漸進式JavaScript框架,適用於構建複雜的用戶界面。 1)其核心概念包括響應式數據、組件化和虛擬DOM。 2)實際應用中,可以通過構建Todo應用和集成VueRouter來展示其功能。 3)調試時,建議使用VueDevtools和console.log。 4)性能優化可通過v-if/v-show、列表渲染優化和異步加載組件等實現。

Vue.js適合小型到中型項目,而React更適用於大型、複雜應用。 1.Vue.js的響應式系統通過依賴追踪自動更新DOM,易於管理數據變化。 2.React採用單向數據流,數據從父組件流向子組件,提供明確的數據流向和易於調試的結構。

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

實現 Vue 中 a 標籤跳轉的方法包括:HTML 模板中使用 a 標籤指定 href 屬性。使用 Vue 路由的 router-link 組件。使用 JavaScript 的 this.$router.push() 方法。可通過 query 參數傳遞參數,並在 router 選項中配置路由以進行動態跳轉。

Vue 中實現組件跳轉有以下方法:使用 router-link 和 <router-view> 組件進行超鏈接跳轉,指定 :to 屬性為目標路徑。直接使用 <router-view> 組件顯示當前路由渲染的組件。使用 router.push() 和 router.replace() 方法進行程序化導航,前者保存歷史記錄,後者替換當前路由不留記錄。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器