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

Vue3 watchEffect核心用法與原理解析

 更新時(shí)間:2025年12月31日 09:29:51   作者:BUG 飼養(yǎng)員  
本文詳細(xì)介紹了Vue 3中的watchEffect函數(shù),包括其核心定義、工作原理、核心特性、實(shí)戰(zhàn)用法、與watch的區(qū)別、常見避坑點(diǎn)以及核心總結(jié),watchEffect簡化了響應(yīng)式偵聽,自動追蹤依賴并立即執(zhí)行,適用于動態(tài)依賴和簡單副作用場景,感興趣的朋友跟隨小編一起看看吧

一、什么是watchEffect?

watchEffect是Vue3組合式API提供的響應(yīng)式偵聽器,用于監(jiān)聽響應(yīng)式數(shù)據(jù)變化并執(zhí)行副作用邏輯。核心定義:立即執(zhí)行一次副作用函數(shù),自動追蹤函數(shù)內(nèi)訪問的響應(yīng)式數(shù)據(jù),當(dāng)依賴變化時(shí)重新執(zhí)行函數(shù),無需手動指定監(jiān)聽源。

它是watch的“簡化版”,專注于“副作用響應(yīng)”,解決了watch需手動指定依賴的繁瑣問題。

二、工作原理

基于Vue3響應(yīng)式系統(tǒng)的ReactiveEffect實(shí)現(xiàn):

  • 執(zhí)行watchEffect傳入的副作用函數(shù),此時(shí)會觸發(fā)響應(yīng)式數(shù)據(jù)的getter
  • 自動收集函數(shù)內(nèi)訪問的所有響應(yīng)式依賴(依賴追蹤)
  • 當(dāng)依賴變化時(shí),觸發(fā)setter,重新執(zhí)行副作用函數(shù)
  • 組件卸載時(shí),自動停止偵聽,避免內(nèi)存泄漏

三、核心特性

  • 自動收集依賴:無需像watch那樣手動指定監(jiān)聽源,函數(shù)內(nèi)用到的響應(yīng)式數(shù)據(jù)都會被追蹤
  • 立即執(zhí)行:默認(rèn)首次渲染就執(zhí)行一次,無需配置immediate
  • 自動清理:支持通過onInvalidate清理副作用(如移除事件監(jiān)聽、取消請求)
  • 自動停止:在

四、實(shí)戰(zhàn)用法示例

4.1 基礎(chǔ)用法(修改頁面標(biāo)題)

<script setup>
import { ref, watchEffect } from 'vue'
const count = ref(0)
// 自動追蹤count,count變化時(shí)重新執(zhí)行
watchEffect(() => {
  document.title = `當(dāng)前計(jì)數(shù):${count.value}`
})
</script>

4.2 自動清理副作用

<script setup>
import { watchEffect } from 'vue'
watchEffect((onInvalidate) => {
  // 綁定事件監(jiān)聽
  const handleClick = () => console.log('點(diǎn)擊事件')
  document.addEventListener('click', handleClick)
  // 依賴變化/組件卸載前清理
  onInvalidate(() => {
    document.removeEventListener('click', handleClick)
  })
})
</script>

4.3 手動停止偵聽

<script setup>
import { ref, watchEffect } from 'vue'
const count = ref(0)
// watchEffect返回停止函數(shù)
const stop = watchEffect(() => {
  console.log('count值:', count.value)
})
// 滿足條件時(shí)停止偵聽
if (count.value > 5) {
  stop()
}
</script>

五、與watch的核心區(qū)別

對比維度watchEffectwatch
依賴收集自動收集函數(shù)內(nèi)依賴需手動指定監(jiān)聽源
觸發(fā)時(shí)機(jī)默認(rèn)立即執(zhí)行默認(rèn)惰性執(zhí)行(需immediate開啟)
舊值獲取不支持支持(newVal, oldVal)
適用場景動態(tài)依賴、簡單副作用舊值對比、節(jié)流防抖、異步請求

六、常見避坑點(diǎn)

  • 副作用堆積:未清理副作用(如事件監(jiān)聽、定時(shí)器),導(dǎo)致多次執(zhí)行后重復(fù)綁定,需用onInvalidate清理
  • 依賴未追蹤:函數(shù)內(nèi)未直接訪問響應(yīng)式數(shù)據(jù)(如嵌套過深未觸發(fā)getter),需確保依賴被直接訪問
  • 異步邏輯問題:異步操作內(nèi)的響應(yīng)式數(shù)據(jù)不會被追蹤,需將依賴寫在同步代碼中

七、核心總結(jié)

watchEffect核心價(jià)值是“簡化響應(yīng)式偵聽”,無需手動指定依賴,適合動態(tài)依賴、簡單副作用場景(如DOM操作、頁面標(biāo)題修改、臨時(shí)調(diào)試)。記住3個(gè)關(guān)鍵點(diǎn):

  • 自動收集依賴,無需手動配置監(jiān)聽源
  • 首次立即執(zhí)行,依賴變化重新執(zhí)行
  • 必做:用onInvalidate清理副作用,避免內(nèi)存泄漏

與watch互補(bǔ)使用,簡單副作用用watchEffect,需舊值對比、異步節(jié)流用watch,高效駕馭Vue3響應(yīng)式偵聽。

到此這篇關(guān)于Vue3 watchEffect詳解:核心用法與原理剖析的文章就介紹到這了,更多相關(guān)Vue3 watchEffect用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中裝飾器的使用示例詳解

    Vue中裝飾器的使用示例詳解

    Vue?Property?Decorator提供了一些裝飾器,包括@Prop、@Watch、@Emit、@Inject、@Provide、@Model等等,本文主要來和大家講講它們的使用方法,需要的可以參考一下
    2023-07-07
  • Vue 組件事件觸發(fā)和監(jiān)聽實(shí)現(xiàn)源碼解析

    Vue 組件事件觸發(fā)和監(jiān)聽實(shí)現(xiàn)源碼解析

    這篇文章主要為大家介紹了Vue 組件事件觸發(fā)和監(jiān)聽實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決

    Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Vue3中使用i18n,this.$t報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • vue+quasar使用遞歸實(shí)現(xiàn)動態(tài)多級菜單

    vue+quasar使用遞歸實(shí)現(xiàn)動態(tài)多級菜單

    這篇文章主要為大家詳細(xì)介紹了vue+quasar使用遞歸實(shí)現(xiàn)動態(tài)多級菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue CLI 3.x 自動部署項(xiàng)目至服務(wù)器的方法

    Vue CLI 3.x 自動部署項(xiàng)目至服務(wù)器的方法

    本教程講解的是 Vue-CLI 3.x 腳手架搭建的vue項(xiàng)目, 利用scp2自動化部署到靜態(tài)文件服務(wù)器 Nginx。非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-04-04
  • vue3中pinia的使用方法

    vue3中pinia的使用方法

    Pinia是Vue3的狀態(tài)管理工具,安裝后在入口文件引入,定義store并在組件中使用,本文就來介紹一下vue3中pinia的使用方法,感興趣的可以了解一下
    2024-10-10
  • Vue之自定義事件內(nèi)容分發(fā)詳解

    Vue之自定義事件內(nèi)容分發(fā)詳解

    這篇文章主要為大家介紹了Vue的自定義事件內(nèi)容分發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 解決pycharm雙擊但是無法打開的情況

    解決pycharm雙擊但是無法打開的情況

    這篇文章主要介紹了解決pycharm雙擊但是無法打開的情況,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue使用axios實(shí)現(xiàn)excel文件下載的功能

    vue使用axios實(shí)現(xiàn)excel文件下載的功能

    這篇文章主要介紹了vue中使用axios實(shí)現(xiàn)excel文件下載的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • el-date-picker日期選擇限制范圍的實(shí)例代碼

    el-date-picker日期選擇限制范圍的實(shí)例代碼

    這篇文章主要介紹了el-date-picker日期選擇限制范圍,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評論

合水县| 吴川市| 黑山县| 松滋市| 清水县| 贡嘎县| 东辽县| 二连浩特市| 鄂托克前旗| 隆子县| 康平县| 嘉义县| 台中市| 南涧| 城市| 南涧| 临海市| 西青区| 开平市| 金溪县| 阳曲县| 新巴尔虎右旗| 宝坻区| 东辽县| 于都县| 舟曲县| 根河市| 汤原县| 石棉县| 池州市| 班戈县| 巴林右旗| 五河县| 舞钢市| 庄浪县| 长寿区| 宁国市| 手游| 甘南县| 腾冲县| 文昌市|