watchEffect 偵聽器
其實我覺得這個玩意兒哈,不用也罷,啊哈哈哈哈哈!
怎麼說呢,你可以理解成 watch 和 watchEffect 這兩個玩意兒的功能是一樣的。
watch
:顯示指定依賴來源,依賴來源更新時執行回呼函數。 watchEffect
:自動收集依賴來源,依賴來源更新時候重新執行自身。
watchEffect 如果存在的話,元件初始化的時候就會自動自行一次,不需要像 watch 一樣設定立即執行。
watch 每次回呼之後是可以取得到最新值和上一次的老值,但 watchEffect 是拿不到的。
watchEffect 不需要指定監聽的屬性,他會自動進行依賴收集,只要我們回呼中使用了響應式的屬性,那麼這些屬性在變更之後這個回呼都會執行,不像watch 只能監聽指定的屬性。
使用的時候也是需要引進。
記得一點哈, watch 可以取代 watchEffect,但 watchEffect 不能取代 watch。
總結:能用 watch 就不要用 watchEffect。
watchEffect 偵聽器使用
首先我們寫一個簡單的 watchEffect 偵聽器。
<template> <div> <h2 id="name">{{name}}</h2> <button @click="btn">修改name</button> </div> </template> <script> import { ref, watchEffect } from "vue"; export default { name: "App", setup() { const name = ref("我是????????."); function btn() { name.value = "????????."; } const res = watchEffect(() => { console.log("watchEffect 执行了"); }); return { name, btn }; } }; </script>
記住 watchEffect 使用也是需要先引入的,不然不好使哈,然後我們保存上面的程式碼,然後刷新頁面看一下執行結果。
我們發現哈,我們一刷新頁面,控制台直接列印了我們輸出的內容,所以說呢,watchEffect 元件一加載完就會執行。
watchEffect 監聽基本資料
我們看到,watchEffect 使用的時候並沒有設定監聽哪個參數,只有一個回呼函數,因為他會自動進行依賴收集,只要我們回呼中使用了響應式的屬性,那麼這些屬性在變更之後這個回呼都會執行。
例如我們監聽 name 的情況。
<template> <div> <h2 id="name">{{name}}</h2> <button @click="btn">修改name</button> </div> </template> <script> import { ref, watchEffect } from "vue"; export default { name: "App", setup() { const name = ref("我是????????."); function btn() { name.value = "????????."; } const res = watchEffect(() => { console.log(name.value); }); return { name, btn }; } }; </script>
我們在回呼函數列印一下 name 的值。
watchEffect 監聽複雜數據
上面的案例是用來監聽一個基本數據,如果監聽一個物件呢?
其實也是一樣的哈。
<template> <div> <h2 id="boy-age">{{boy.age}}</h2> <button @click="boy.age++">修改name</button> </div> </template> <script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log(boy.age); }); return { boy }; } }; </script>
上邊程式碼呢,一個按鈕,每次點擊讓 boy 物件裡面的 age 加一操作,然後監聽一下 age 的新值
可以看到是完全沒有問題的哈!
watchEffect 啥時候執行
上邊說過了哈,只要我們回呼中使用了響應式的屬性,那麼這些屬性在變更之後這個回調都會執行,不像watch 只能監聽指定的屬性。
啥意思呢,簡單理解一下,就是回調裡面使用了的話他就執行,沒用他就不執行。
就像上面的案例,修改age 的時候,我們在回調裡面打印了age,在回調裡面涉及到age 了,他就會執行,如果我們這次不使用改變的age,只打印一句話,看一下能不能執行回呼哈。
<template> <div> <h2 id="boy-age">{{boy.age}}</h2> <button @click="boy.age++">修改name</button> </div> </template> <script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log("执行了"); }); return { boy }; } }; </script>
刷新儲存,點選按鈕修改 age 的值,看看控制台有沒有列印 #執行了
三個字。
明白那句話了嗎?知道什麼時候執行了吧? OK。
關閉 watchEffect 監聽
假設,我們開始使用了 watchEffect 監聽,但是我現在不想讓他監聽了怎麼辦呢?其實超簡單。
const res = watchEffect(() => { console.log(boy.age); });
上邊我們不是建立一個 watchEffect 偵聽器了嗎?關閉只需要呼叫一下就關了哈。
res() // 关闭
下面看具體程式碼。
<script> import { ref, watchEffect, reactive } from "vue"; export default { name: "App", setup() { const boy = reactive({ name: "我是????????.", age: 10 }); const res = watchEffect(() => { console.log(boy.age); }); res() // 关闭监听 return { boy }; } }; </script>{{boy.age}}
儲存一下,點擊按鈕看效果。
以上是Vue3中watchEffect偵聽器如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

Netflix在前端技術上的選擇主要集中在性能優化、可擴展性和用戶體驗三個方面。 1.性能優化:Netflix選擇React作為主要框架,並開發了SpeedCurve和Boomerang等工具來監控和優化用戶體驗。 2.可擴展性:他們採用微前端架構,將應用拆分為獨立模塊,提高開發效率和系統擴展性。 3.用戶體驗:Netflix使用Material-UI組件庫,通過A/B測試和用戶反饋不斷優化界面,確保一致性和美觀性。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器