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

一文詳解vue中偵聽器的使用

 更新時(shí)間:2024年04月01日 17:10:24   作者:刻刻帝的海角  
這篇文章主要為大家詳細(xì)介紹了vue中偵聽器使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下

基本示例?

計(jì)算屬性允許我們聲明性地計(jì)算衍生值。然而在有些情況下,我們需要在狀態(tài)變化時(shí)執(zhí)行一些“副作用”:例如更改 DOM,或是根據(jù)異步操作的結(jié)果去修改另一處的狀態(tài)。

在組合式 API 中,我們可以使用 watch 函數(shù)在每次響應(yīng)式狀態(tài)發(fā)生變化時(shí)觸發(fā)回調(diào)函數(shù):

<script setup>
import { ref, watch } from 'vue'
 
const question = ref('')
const answer = ref('Questions usually contain a question mark. ;-)')
const loading = ref(false)
 
// 可以直接偵聽一個(gè) ref
watch(question, async (newQuestion, oldQuestion) => {
  if (newQuestion.includes('?')) {
    loading.value = true
    answer.value = 'Thinking...'
    try {
      const res = await fetch('https://yesno.wtf/api')
      answer.value = (await res.json()).answer
    } catch (error) {
      answer.value = 'Error! Could not reach the API. ' + error
    } finally {
      loading.value = false
    }
  }
})
</script>
 
<template>
  <p>
    Ask a yes/no question:
    <input v-model="question" :disabled="loading" />
  </p>
  <p>{{ answer }}</p>
</template>

偵聽數(shù)據(jù)源類型?

watch 的第一個(gè)參數(shù)可以是不同形式的“數(shù)據(jù)源”:它可以是一個(gè) ref (包括計(jì)算屬性)、一個(gè)響應(yīng)式對(duì)象、一個(gè) getter 函數(shù)、或多個(gè)數(shù)據(jù)源組成的數(shù)組:

const x = ref(0)
const y = ref(0)
 
// 單個(gè) ref
watch(x, (newX) => {
  console.log(`x is ${newX}`)
})
 
// getter 函數(shù)
watch(
  () => x.value + y.value,
  (sum) => {
    console.log(`sum of x + y is: ${sum}`)
  }
)
 
// 多個(gè)來(lái)源組成的數(shù)組
watch([x, () => y.value], ([newX, newY]) => {
  console.log(`x is ${newX} and y is ${newY}`)
})

注意,你不能直接偵聽響應(yīng)式對(duì)象的屬性值,例如:

const obj = reactive({ count: 0 })
 
// 錯(cuò)誤,因?yàn)?watch() 得到的參數(shù)是一個(gè) number
watch(obj.count, (count) => {
  console.log(`count is: ${count}`)
})

這里需要用一個(gè)返回該屬性的 getter 函數(shù):

// 提供一個(gè) getter 函數(shù)
watch(
  () => obj.count,
  (count) => {
    console.log(`count is: ${count}`)
  }
)

深層偵聽器?

直接給 watch() 傳入一個(gè)響應(yīng)式對(duì)象,會(huì)隱式地創(chuàng)建一個(gè)深層偵聽器——該回調(diào)函數(shù)在所有嵌套的變更時(shí)都會(huì)被觸發(fā):

const obj = reactive({ count: 0 })
 
watch(obj, (newValue, oldValue) => {
  // 在嵌套的屬性變更時(shí)觸發(fā)
  // 注意:`newValue` 此處和 `oldValue` 是相等的
  // 因?yàn)樗鼈兪峭粋€(gè)對(duì)象!
})
 
obj.count++

相比之下,一個(gè)返回響應(yīng)式對(duì)象的 getter 函數(shù),只有在返回不同的對(duì)象時(shí),才會(huì)觸發(fā)回調(diào):

js

watch(
  () => state.someObject,
  () => {
    // 僅當(dāng) state.someObject 被替換時(shí)觸發(fā)
  }
)

你也可以給上面這個(gè)例子顯式地加上 deep 選項(xiàng),強(qiáng)制轉(zhuǎn)成深層偵聽器:

watch(
  () => state.someObject,
  (newValue, oldValue) => {
    // 注意:`newValue` 此處和 `oldValue` 是相等的
    // *除非* state.someObject 被整個(gè)替換了
  },
  { deep: true }
)]

到此這篇關(guān)于一文詳解vue中偵聽器的使用的文章就介紹到這了,更多相關(guān)vue偵聽器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue2.5通過(guò)json文件讀取數(shù)據(jù)的方法

    Vue2.5通過(guò)json文件讀取數(shù)據(jù)的方法

    本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹了Vue2.5通過(guò)json文件讀取數(shù)據(jù)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-02-02
  • Vue3中Pinia的基本使用筆記

    Vue3中Pinia的基本使用筆記

    Pinia是一個(gè)全新的Vue狀態(tài)管理庫(kù),是Vuex的代替者,尤雨溪強(qiáng)勢(shì)推薦,下面這篇文章主要給大家介紹了關(guān)于Vue3中Pinia的基本使用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Vue防止白屏添加首屏動(dòng)畫的實(shí)例

    Vue防止白屏添加首屏動(dòng)畫的實(shí)例

    今天小編就為大家分享一篇Vue防止白屏添加首屏動(dòng)畫的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • 解決vue過(guò)濾器filters獲取不到this對(duì)象的問(wèn)題

    解決vue過(guò)濾器filters獲取不到this對(duì)象的問(wèn)題

    這篇文章主要介紹了解決vue過(guò)濾器filters獲取不到this對(duì)象的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • vue resource post請(qǐng)求時(shí)遇到的坑

    vue resource post請(qǐng)求時(shí)遇到的坑

    這篇文章主要介紹了vue resource post請(qǐng)求時(shí)遇到的坑,需要的朋友可以參考下
    2017-10-10
  • 總結(jié)vue映射的方法與混入的使用過(guò)程

    總結(jié)vue映射的方法與混入的使用過(guò)程

    這篇文章主要介紹了總結(jié)vue映射的方法與混入的使用過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 常見(jiàn)的5種Vue組件通信方式總結(jié)

    常見(jiàn)的5種Vue組件通信方式總結(jié)

    在?Vue.js?中,組件通信是開發(fā)過(guò)程中非常重要的一部分,它涉及到不同組件之間的數(shù)據(jù)傳遞和交互,本文將介紹如何實(shí)現(xiàn)父子組件之間的有效通信,并盤點(diǎn)了常見(jiàn)的5種Vue組件通信方式總結(jié),需要的朋友可以參考下
    2024-03-03
  • vue實(shí)現(xiàn)點(diǎn)擊按鈕倒計(jì)時(shí)

    vue實(shí)現(xiàn)點(diǎn)擊按鈕倒計(jì)時(shí)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)點(diǎn)擊按鈕倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue3+TS+Vite+NaiveUI搭建一個(gè)項(xiàng)目骨架實(shí)現(xiàn)

    Vue3+TS+Vite+NaiveUI搭建一個(gè)項(xiàng)目骨架實(shí)現(xiàn)

    本文主要介紹了Vue3+TS+Vite+NaiveUI搭建一個(gè)項(xiàng)目骨架實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 解決vue同一slot在組件中渲染多次的問(wèn)題

    解決vue同一slot在組件中渲染多次的問(wèn)題

    今天小編就為大家分享一篇解決vue同一slot在組件中渲染多次的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論