偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用了 Vue3,還在死盯變量寫 watch?你該試試 watchEffect

開發(fā) 前端
自從 Vue3 發(fā)布以后,很多同學第一時間就開始用上了 Composition API??墒牵?5 年過去了,有些新的 API 很多同學卻依然不會使用,比如?watchEffect。

Hello,大家好,我是 Sunday。

自從 Vue3 發(fā)布以后,很多同學第一時間就開始用上了 Composition API。

可是, 5 年過去了,有些新的 API 很多同學卻依然不會使用,比如 watchEffect。

咱們,下來看一個場景,比如:咱們現(xiàn)在要監(jiān)聽 a、b、c 三個變量的變化,然后打印出他們相加的和

watch(
 () => [a.value, b.value, c.value],
 () => {
  console.log('watch', a.value + b.value + c.value)
 }
)

這段代碼也不是不行,但每次加個變量(比如增加了變量 d),咱們就得手動改一遍依賴,太過于麻煩了。

那么,怎么做最好呢?此時就可以使用 watchEffect!

先來回顧下 watch

我們先來復習一下 watch 的本質(zhì):你告訴 Vue,“這個變量變了,我要做點事”,Vue 就在變量變化時調(diào)用你的回調(diào)。

所以你必須明確告訴 Vue:“我關(guān)注這些變量”。

但問題來了:如果變量很多,那么就得寫一個非常長的數(shù)組,同時萬一寫漏了哪個依賴,整個邏輯就不能用了。

于是 Vue3 提供了一個自動依賴收集的版本:watchEffect

什么是 watchEffect?

watchEffect 的思路是這樣的:


“你不用告訴我你依賴了誰,反正你用了啥,我都記下來,以后它變了我就重新跑你的邏輯?!?/span>

來看一個簡單的示例,同樣的判斷 a、b、c 相加,就可以直接這么寫:

watchEffect(() => {
 console.log(a.value + b.value + c.value)
})

這個函數(shù)在首次運行時,Vue 會記錄下 a、b、c 的依賴,以后只要他們中有一個變了,函數(shù)就會重新執(zhí)行。

你不用再手動指定依賴,也不用擔心漏掉誰,簡直是寫 副作用 邏輯的神器?。?/span>

watchEffect 最適合哪些場景?

說白了,它最適合那些 副作用邏輯本身依賴了誰,是動態(tài)的、不好提前寫死 的場景,比如:

依賴較多或動態(tài)變化

watchEffect(() => {
  if (condition.value) {
    doSomethingWith(a.value)
  } else {
    doSomethingWith(b.value)
  }
})

你發(fā)現(xiàn)沒?這里到底是依賴 a 還是 b,取決于運行時的邏輯,用 watch 寫的話就有點別扭。

計算邏輯與副作用緊耦合

watchEffect(() => {
  const total = items.value.reduce((sum, item) => sum + item.price, 0)
  updateTotalUI(total)
})

只要 items 或它內(nèi)部任意一項的 price 變了,這段邏輯都會重新執(zhí)行。

用 watch 寫這個?你得自己監(jiān)聽 items,還得考慮深度監(jiān)聽……多麻煩啊

調(diào)試打印

watchEffect(() => {
  console.log('User changed:', user.value)
})

不用手動寫 watch(() => user.value),直接拿來打印就行,特別適合臨時調(diào)試。

那 watch 就沒用了?

當然不是!watch 還是有它的場景,比如:

  • 明確知道你只想監(jiān)聽某個變量 的時候
  • 需要防抖 / 節(jié)流處理(比如輸入框)的時候
  • 想拿到“新值 vs 舊值”做比較 的時候

舉個例子:

watch(searchKeyword, (newVal, oldVal) => {
  if (newVal !== oldVal) {
    fetchSearchResult(newVal)
  }
}, { immediate: true })

這類場景 watch 會比 watchEffect 更加實用。

因此,如果你發(fā)現(xiàn)在 某些場景下 使用 Watch 有點麻煩的話,那么不妨想想 watchEffect 能不能解決你的問題

責任編輯:武曉燕 來源: 程序員Sunday
相關(guān)推薦

2022-07-14 08:22:48

Computedvue3

2022-06-09 08:28:27

Vue3watchwatchEffec

2021-12-07 05:44:45

Vue 3 Watch WatchEffect

2025-04-07 08:50:36

2023-12-14 08:25:14

WatchVue.js監(jiān)聽數(shù)據(jù)

2025-06-30 09:46:34

Vue3性能API

2021-08-23 13:25:25

Vue3CSS前端

2021-01-20 14:25:53

Vue3CSS前端

2021-12-01 08:11:44

Vue3 插件Vue應(yīng)用

2024-09-05 08:50:11

2024-01-04 08:38:21

Vue3API慎用

2021-11-30 08:19:43

Vue3 插件Vue應(yīng)用

2023-11-28 09:03:59

Vue.jsJavaScript

2023-01-05 07:55:59

Zookeeper服務(wù)注冊

2024-10-14 09:34:39

vue3通信emit

2025-05-06 09:35:00

2020-09-19 21:15:26

Composition

2022-07-25 14:54:32

前端

2022-09-19 18:49:01

偵聽器異步組件

2020-11-06 08:54:43

Vue 3.0函數(shù)代碼
點贊
收藏

51CTO技術(shù)棧公眾號