日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 Vue 正文

VUE3中watch和watchEffect的用法詳解_vue.js

作者:得知此事須躬行 ? 更新時間: 2022-04-10 Vue

watch和watchEffect都是監(jiān)聽器,但在寫法和使用上有所區(qū)別。

watch在監(jiān)聽 ref 類型時和監(jiān)聽reactive類型時watch函數的寫發(fā)有所不一樣。
watch在監(jiān)聽 ref 類型時:

<script>
import {ref, watch} from 'vue'
export default {
? ? setup() {?
? ? ? ? const state = ref(0)

? ? ? ? watch(state, (newValue, oldValue) => {
? ? ? ? ? console.log(`原值為${oldValue}`)
? ? ? ? ? console.log(`新值為${newValue}`)
? ? ? ? ? /* 1秒后打印結果:
? ? ? ? ? ? ? ? ? 原值為0
? ? ? ? ? ? ? ? ? 新值為1
? ? ? ? ? */
? ? ? ? })

? ? ? ? // 1秒后將state值+1
? ? ? ? setTimeout(() => {
? ? ? ? ? state.value ++
? ? ? ? }, 1000)
? ? }
}
</script>

watch在監(jiān)聽 reactive類型時:

<script>
import {reactive, watch} from 'vue'
export default {
? ? setup() {?
? ? ? ? const state = reactive({count: 0})

? ? ? ? watch(() => state.count, (newValue, oldValue) => {
? ? ? ? ? console.log(`原值為${oldValue}`)
? ? ? ? ? console.log(`新值為${newValue}`)
? ? ? ? ? /* 1秒后打印結果:
? ? ? ? ? ? ? ? ? 原值為0
? ? ? ? ? ? ? ? ? 新值為1
? ? ? ? ? */
? ? ? ? })

? ? ? ? // 1秒后將state.count的值+1
? ? ? ? setTimeout(() => {
? ? ? ? ? state.count ++
? ? ? ? }, 1000)
? ? }
}
</script>

watchEffect 它與 watch 的區(qū)別主要有以下幾點:

  • 不需要手動傳入依賴
  • 每次初始化時會執(zhí)行一次回調函數來自動獲取依賴
  • 無法獲取到原值,只能得到變化后的值
<script>
import {reactive, watchEffect} from 'vue'
export default {
? ? setup() {?
? ? ? ? ? const state = reactive({ count: 0, name: 'zs' })

? ? ? ? ? watchEffect(() => {
? ? ? ? ? console.log(state.count)
? ? ? ? ? console.log(state.name)
? ? ? ? ? /* ?初始化時打印:
? ? ? ? ? ? ? ? ? 0
? ? ? ? ? ? ? ? ? zs

? ? ? ? ? ? 1秒后打印:
? ? ? ? ? ? ? ? ? 1
? ? ? ? ? ? ? ? ? ls
? ? ? ? ? */
? ? ? ? ? })

? ? ? ? ? setTimeout(() => {
? ? ? ? ? ? state.count ++
? ? ? ? ? ? state.name = 'ls'
? ? ? ? ? }, 1000)
? ? }
}
</script>

根據以上特征,我們可以自行選擇使用哪一個監(jiān)聽器
另:watch和watchEffect監(jiān)聽器在同一個頁面中都可以使用多次,對于分別監(jiān)聽多個變量的時候

原文鏈接:https://blog.csdn.net/qq_17355709/article/details/112723178

欄目分類
最近更新