成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue3 的 watch,你們都手動清除過嗎?

開發 前端
在 Vue3 的響應式系統中,watch 是監聽數據變化的核心 API 之一。隨著 Composition API 的普及,開發者需要更清晰地理解副作用管理機制。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心~

在 Vue3 的響應式系統中,watch 是監聽數據變化的核心 API 之一。隨著 Composition API 的普及,開發者需要更清晰地理解副作用管理機制。

一、Vue3 的 watch 機制

1.1 基本用法

import { ref, watch } from 'vue'

const count = ref(0)

// 基本監聽模式
const stopWatch = watch(count, (newVal, oldVal) => {
  console.log(`值從 ${oldVal} 變為 ${newVal}`)
})

// 停止監聽
// stopWatch() // 手動調用停止監聽

1.2 自動停止機制

當在組件 setup() 中同步創建時,Vue3 會自動關聯生命周期:

export default {
  setup() {
    const count = ref(0)
    
    // 自動綁定組件生命周期
    watch(count, (val) => {
      console.log('Count changed:', val)
    })

    return { count }
  }
}

組件卸載時,Vue 會自動停止這些監聽器,無需手動干預

二、必須手動清除的 3 種場景

2.1 異步創建的監聽器

import { onMounted, onUnmounted } from'vue'

exportdefault {
  setup() {
    let stopWatch = null
    
    onMounted(() => {
      // 異步創建監聽器
      setTimeout(() => {
        stopWatch = watch(/* ... */)
      }, 1000)
    })

    onUnmounted(() => {
      if (stopWatch) {
        stopWatch() // 必須手動清除
      }
    })
  }
}

關鍵點:Vue 無法追蹤異步創建的監聽器,需要開發者自行管理

2.2 動態條件監聽

const searchKeyword = ref('')
let searchWatch = null

// 根據用戶操作動態創建
function enableSearch() {
  searchWatch = watch(searchKeyword, () => {
    // 執行搜索邏輯
  })
}

function disableSearch() {
  searchWatch?.() // 主動銷毀
}

典型場景:需要運行時動態啟用的監聽邏輯

2.3 全局狀態監聽

// store.js
import { watch } from'vue'
import store from'./store'

// 全局監聽(危險操作?。?let globalWatcher = null

exportfunction initGlobalWatch() {
  globalWatcher = watch(
    () => store.state.user,
    (user) => {
      console.log('User changed:', user)
    }
  )
}

exportfunction cleanupGlobalWatch() {
  globalWatcher?.()
}

風險提示:全局監聽器不會自動銷毀,必須提供顯式清理接口

三、智能管理方案

3.1 自動管理組合式函數

import { watchEffect, onScopeDispose } from'vue'

exportfunction useAutoCleanWatcher() {
const stop = watchEffect(() => {
    // 副作用邏輯
  })

// 自動注冊清理
  onScopeDispose(() => {
    stop()
  })

return { stop }
}

優勢:利用 onScopeDispose 實現自動清理

3.2 監聽器工廠模式

function createSmartWatcher(source, callback) {
const stop = watch(source, callback)

return {
    stop,
    restart: () => {
      stop()
      return createSmartWatcher(source, callback)
    }
  }
}

// 使用示例
const { stop } = createSmartWatcher(value, () => {})

擴展性:封裝重啟功能,增強可維護性

責任編輯:武曉燕 來源: 前端之神
相關推薦

2025-05-06 09:35:00

2024-09-05 08:50:11

2022-07-14 08:22:48

Computedvue3

2023-12-14 08:25:14

WatchVue.js監聽數據

2022-06-09 08:28:27

Vue3watchwatchEffec

2021-12-01 08:11:44

Vue3 插件Vue應用

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-11-17 08:24:47

Vue3 插件Vue應用

2024-10-24 09:18:45

2020-09-19 21:15:26

Composition

2021-12-08 09:09:33

Vue 3 Computed Vue2

2023-11-16 08:29:26

2021-12-07 05:44:45

Vue 3 Watch WatchEffect

2020-11-12 08:32:14

Vue3模板優化

2022-06-21 12:09:18

Vue差異

2019-08-26 09:50:09

2021-11-16 08:50:29

Vue3 插件Vue應用

2021-05-26 10:40:28

Vue3TypeScript前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜男人免费视频 | 国产精品毛片久久久久久久 | 一级黄色毛片免费 | 国产精品福利久久久 | 欧美日韩在线视频一区二区 | 日韩精品成人av | 欧美成人一区二免费视频软件 | 亚洲国产一区二区三区 | 在线男人天堂 | 国产精品久久久久久 | 黑人精品| 亚洲婷婷一区 | 91精品国产91久久久久久吃药 | 国产精品成人69xxx免费视频 | 久久久久久国产精品免费免费狐狸 | 精品视频一区二区三区在线观看 | 日韩精品一区二区三区视频播放 | 亚洲综合国产精品 | 91精品国产91久久综合桃花 | 99福利视频 | 午夜一区二区三区在线观看 | 91电影在线 | 国产成人jvid在线播放 | 国产超碰人人爽人人做人人爱 | 国产在线一区二区三区 | 亚洲欧美国产精品一区二区 | 夜久久| 欧美日韩一区二区在线播放 | 免费一区二区三区 | 欧美日韩在线免费观看 | 中文字幕 视频一区 | 波多野结衣二区 | 久久久亚洲一区 | 久久伊人久久 | 91精品一区二区三区久久久久 | 亚洲精彩视频 | 国产精品18hdxxxⅹ在线 | 亚洲成人黄色 | 一级片片| 成人精品国产 | 午夜影院在线免费观看视频 |