欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中watchEffect的追蹤邏輯介紹

 更新時(shí)間:2025年04月18日 09:07:28   作者:墮落年代  
這篇文章主要介紹了Vue中watchEffect的追蹤邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Vue中watchEffect的追蹤邏輯

在 Vue3 的 watchEffect 中,回調(diào)函數(shù)的行為取決于響應(yīng)式依賴的追蹤結(jié)果,但確實(shí)存在需要開發(fā)者主動(dòng)處理邏輯的場景。

以下是具體特性與處理邏輯的關(guān)鍵點(diǎn):

一、核心執(zhí)行機(jī)制

立即執(zhí)行與自動(dòng)追蹤

  • watchEffect 在初始化時(shí)會(huì)立即執(zhí)行一次回調(diào)函數(shù),并在執(zhí)行過程中自動(dòng)追蹤所有被使用的響應(yīng)式依賴(如 ref、reactive 對(duì)象等)。
  • 當(dāng)這些依賴發(fā)生變更時(shí),回調(diào)函數(shù)會(huì)重新執(zhí)行
const count = ref(0);
watchEffect(() => {
  console.log(`當(dāng)前值:${count.value}`);
});
// 初始化立即輸出:當(dāng)前值:0
count.value++; // 輸出:當(dāng)前值:1

動(dòng)態(tài)依賴收集

  • 每次回調(diào)執(zhí)行時(shí),Vue 會(huì)重新收集依賴。
  • 如果回調(diào)中新增了響應(yīng)式依賴,后續(xù)變更也會(huì)觸發(fā)回調(diào):
const enabled = ref(false);
watchEffect(() => {
  if (enabled.value) {
    console.log("啟用狀態(tài):", enabled.value); // 只有啟用時(shí)才會(huì)追蹤 enabled
  }
});
enabled.value = true; // 觸發(fā)回調(diào),輸出:啟用狀態(tài):true

二、開發(fā)者需要處理的邏輯

條件判斷與副作用控制

  • 即使依賴未變化,回調(diào)函數(shù)仍可能因其他原因執(zhí)行(如組件重新渲染)。
  • 開發(fā)者需通過條件語句過濾無效邏輯:
watchEffect(() => {
  if (someCondition.value) { // 手動(dòng)控制邏輯執(zhí)行條件
    fetchData();
  }
});

副作用清理

  • 使用 onInvalidate 參數(shù)處理異步副作用(如定時(shí)器、網(wǎng)絡(luò)請(qǐng)求)
  • 防止內(nèi)存泄漏:
watchEffect((onInvalidate) => {
  const timer = setInterval(() => {
    console.log("輪詢中...");
  }, 1000);
  onInvalidate(() => clearInterval(timer)); // 清理副作用
});

性能優(yōu)化

  • 對(duì)于高頻變更的依賴
  • 可結(jié)合 debouncethrottle 控制回調(diào)觸發(fā)頻率:
import { debounce } from 'lodash-es';
watchEffect(debounce(() => {
  searchAPI(keyword.value);
}, 300));

三、與 watch 的對(duì)比

特性watchEffectwatch
依賴聲明自動(dòng)收集手動(dòng)指定
執(zhí)行時(shí)機(jī)立即執(zhí)行默認(rèn)惰性(可配置 immediate: true)
適用場景副作用邏輯、多依賴聯(lián)動(dòng)精準(zhǔn)監(jiān)聽、新舊值對(duì)比
性能影響可能因依賴動(dòng)態(tài)變化產(chǎn)生更多計(jì)算更可控

總結(jié)

  • 自動(dòng)觸發(fā)watchEffect 的回調(diào)函數(shù)由依賴變更觸發(fā),但開發(fā)者需主動(dòng)處理?xiàng)l件過濾、副作用清理和性能優(yōu)化。
  • 靈活性與風(fēng)險(xiǎn):雖然省去了手動(dòng)聲明依賴的步驟,但過度依賴自動(dòng)追蹤可能導(dǎo)致不必要的計(jì)算(如追蹤到非核心依賴)。
  • 最佳實(shí)踐:適合處理多依賴聯(lián)動(dòng)的副作用邏輯(如 UI 同步、日志記錄),復(fù)雜場景建議結(jié)合 watch 使用。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2.x中monaco-editor的使用說明

    vue2.x中monaco-editor的使用說明

    這篇文章主要介紹了vue2.x中monaco-editor的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue實(shí)現(xiàn)萬年日歷的示例詳解

    Vue實(shí)現(xiàn)萬年日歷的示例詳解

    又是一個(gè)老生常談的功能,接下來會(huì)從零實(shí)現(xiàn)一個(gè)萬年日歷,從布局到邏輯,再到隨處可見的打卡功能。文中的示例代碼簡潔易懂,需要的可以參考一下
    2023-01-01
  • Vue項(xiàng)目安裝less和less-loader的詳細(xì)步驟

    Vue項(xiàng)目安裝less和less-loader的詳細(xì)步驟

    這篇文章主要介紹了Vue項(xiàng)目安裝less和less-loader的詳細(xì)步驟,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Vue elementui字體圖標(biāo)顯示問題解決方案

    Vue elementui字體圖標(biāo)顯示問題解決方案

    這篇文章主要介紹了Vue elementui字體圖標(biāo)顯示問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解Vue組件之間的數(shù)據(jù)通信實(shí)例

    詳解Vue組件之間的數(shù)據(jù)通信實(shí)例

    本篇文章主要介紹了詳解Vue組件之間的數(shù)據(jù)通信實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Vue.js與Flask/Django后端配合方式

    Vue.js與Flask/Django后端配合方式

    在現(xiàn)代Web開發(fā)中,Vue.js與Flask或Django配合使用,實(shí)現(xiàn)前后端分離,提高開發(fā)效率和應(yīng)用性能,本文介紹了整合Vue.js和Flask/Django的步驟,包括環(huán)境搭建、API編寫、項(xiàng)目配置,以及生產(chǎn)部署,此架構(gòu)不僅加快了開發(fā)進(jìn)程,還提高了項(xiàng)目的可維護(hù)性和可擴(kuò)展性
    2024-09-09
  • 基于Vue.js實(shí)現(xiàn)一個(gè)完整的登錄功能

    基于Vue.js實(shí)現(xiàn)一個(gè)完整的登錄功能

    在現(xiàn)代Web應(yīng)用中,用戶登錄功能是一個(gè)核心模塊,它不僅涉及到用戶身份驗(yàn)證,還需要處理表單驗(yàn)證、狀態(tài)管理、接口調(diào)用等多個(gè)環(huán)節(jié),本文將基于一個(gè)Vue.js項(xiàng)目中的登錄功能實(shí)現(xiàn),深入解析其背后的技術(shù)細(xì)節(jié),幫助開發(fā)者更好地理解和實(shí)現(xiàn)類似功能,需要的朋友可以參考下
    2025-02-02
  • 如何使用Vue3.2+Vite2.7從0快速打造一個(gè)UI組件庫

    如何使用Vue3.2+Vite2.7從0快速打造一個(gè)UI組件庫

    構(gòu)建工具使用vue3推薦的vite,下面這篇文章主要給大家介紹了關(guān)于如何使用Vue3.2+Vite2.7從0快速打造一個(gè)UI組件庫的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 詳解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 構(gòu)建記事本應(yīng)用

    詳解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 構(gòu)建記事本應(yīng)用

    本篇文章主要介紹了詳解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 構(gòu)建記事本應(yīng)用 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 利用vue3+ts實(shí)現(xiàn)管理后臺(tái)(增刪改查)

    利用vue3+ts實(shí)現(xiàn)管理后臺(tái)(增刪改查)

    這篇文章主要介紹了利用vue3+ts實(shí)現(xiàn)管理后臺(tái)(增刪改查),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論