国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3的watchEffect的妙用,與watch的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了Vue3的watchEffect的妙用,與watch的區(qū)別。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

在Vue3中,引入了Composition API,其中的watchEffect()函數(shù)是一個(gè)非常強(qiáng)大和靈活的工具,用于處理響應(yīng)式數(shù)據(jù)的變化,使得項(xiàng)目更加彈性和靈活。它與watch有所不同,本文將介紹watchEffect()的定義、特點(diǎn)、與watch的區(qū)別以及使用時(shí)的注意事項(xiàng)。

一、定義

watchEffect()函數(shù)用于創(chuàng)建一個(gè)自動(dòng)追蹤依賴的響應(yīng)式副作用。它會(huì)在初始化時(shí)會(huì)立即執(zhí)行一次,并自動(dòng)追蹤在回調(diào)函數(shù)中使用的所有響應(yīng)式數(shù)據(jù),在這些數(shù)據(jù)發(fā)生變化時(shí)重新運(yùn)行回調(diào)函數(shù)。

例如,在每當(dāng)?todoId?的引用發(fā)生變化時(shí)使用偵聽器來加載一個(gè)遠(yuǎn)程資源,如果用watch,是這么寫:

<template>
  <div>Test</div>
</template>

<script setup>
  import { ref, watch } from 'vue'
  const todoId = ref(1)
  const data = ref(null)

  watch(
    todoId,
    async () => {
      const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)
      data.value = await response.json()
      console.log(data.value)
    },
    { immediate: true }
  )
</script>

打印:

Vue3的watchEffect的妙用,與watch的區(qū)別,vue,vue.js,前端,javascript

但是用了watchEffect()就可以簡化為:

<template>
  <div>Test</div>
</template>

<script setup>
  import { ref, watchEffect } from 'vue'
  const todoId = ref(1)
  const data = ref(null)

  watchEffect(async () => {
    const response = await fetch(`https://jsonplaceholder.typicode.com/todos/${todoId.value}`)
    data.value = await response.json()
    console.log(data.value)
  })
</script>

?打印:

Vue3的watchEffect的妙用,與watch的區(qū)別,vue,vue.js,前端,javascript

兩者都立即打印了data。但下面的例子中,回調(diào)會(huì)立即執(zhí)行,不需要指定?immediate: true。在執(zhí)行期間,它會(huì)自動(dòng)追蹤?todoId.value?作為依賴(和計(jì)算屬性類似)。每當(dāng)?todoId.value?變化時(shí),回調(diào)會(huì)再次執(zhí)行。有了?watchEffect(),我們不再需要明確傳遞?todoId?作為源值。

從這個(gè)角度來看,watchEffect()的作用類似于Vue2中的computed,即依賴項(xiàng)發(fā)生變化,自己也跟著改變。但與computed不同,watchEffect()沒有返回值,而是直接執(zhí)行回調(diào)函數(shù)。

二、特點(diǎn)

watchEffect()會(huì)自動(dòng)追蹤其回調(diào)函數(shù)中使用的所有響應(yīng)式數(shù)據(jù),并在這些數(shù)據(jù)發(fā)生變化時(shí)重新運(yùn)行回調(diào)函數(shù)。這使得我們無需手動(dòng)指定要監(jiān)聽的具體屬性,減少了代碼的冗余。

? ? 對于這種只有一個(gè)依賴項(xiàng)的例子來說,watchEffect()?的好處相對較小。但是對于有多個(gè)依賴項(xiàng)的偵聽器來說,使用?watchEffect()?可以消除手動(dòng)維護(hù)依賴列表的負(fù)擔(dān)。

? ? 此外,如果你需要偵聽一個(gè)嵌套數(shù)據(jù)結(jié)構(gòu)中的幾個(gè)屬性,watchEffect()?可能會(huì)比深度偵聽器更有效,因?yàn)樗鼘⒅桓櫥卣{(diào)中被使用到的屬性,而不是遞歸地跟蹤所有的屬性。?

多個(gè)依賴項(xiàng)例子:

<template>
  <div>Test</div>
</template>

<script setup>
  import { reactive } from 'vue'
  const state = reactive({
    count: 0,
    name: 'John',
    age: 25
  })

  // 使用watchEffect()監(jiān)聽count和name的變化
  watchEffect(() => {
    console.log('count or name changed:', state.count, state.name)
  })

  // 模擬count和name變化
  setTimeout(() => {
    state.count = 1 // 輸出'count or name changed: 1 John'
    state.name = 'Alice' // 輸出'count or name changed: 1 Alice'
  }, 1000)
</script>

打?。?/p>

Vue3的watchEffect的妙用,與watch的區(qū)別,vue,vue.js,前端,javascript

深度依賴?yán)樱?/p>

<template>
  <div>Test</div>
</template>

<script setup>
  import { reactive, watchEffect } from 'vue'
  const state = reactive({
    person: {
      name: 'John',
      age: 25
    },
    todos: [
      { text: 'Task 1', completed: false },
      { text: 'Task 2', completed: true },
      { text: 'Task 3', completed: false }
    ]
  })

  // 使用watchEffect()監(jiān)聽person對象中name和age的變化
  watchEffect(() => {
    console.log('person changed:', state.person.name, state.person.age)
  })

  // 模擬person中name和age的變化
  setTimeout(() => {
    state.person.name = 'Alice' // 輸出'person changed: Alice 25'
    state.person.age = 30 // 輸出'person changed: Alice 30'
  }, 1000)
</script>

打?。?/p>

Vue3的watchEffect的妙用,與watch的區(qū)別,vue,vue.js,前端,javascript

三、與watch的區(qū)別

1. 監(jiān)聽方式不同watchEffect()是自動(dòng)追蹤所有使用的響應(yīng)式數(shù)據(jù),而watch需要手動(dòng)指定要監(jiān)聽的特定屬性。

2. 監(jiān)聽粒度不同watchEffect()監(jiān)聽的是響應(yīng)式數(shù)據(jù)的整個(gè)變化,而watch可以偵聽指定的屬性或表達(dá)式的變化。

3. 計(jì)算屬性處理方式不同:對于計(jì)算屬性,watchEffect()會(huì)自動(dòng)依賴于計(jì)算屬性使用到的響應(yīng)式數(shù)據(jù),而watch需要手動(dòng)指定計(jì)算屬性為監(jiān)聽目標(biāo)。

四、注意事項(xiàng)

1. 避免過度監(jiān)聽:由于watchEffect()會(huì)追蹤使用到的所有響應(yīng)式數(shù)據(jù),因此要確保在回調(diào)函數(shù)中只使用必要的響應(yīng)式數(shù)據(jù),避免造成不必要的渲染開銷。

2. 異步操作需謹(jǐn)慎處理:由于watchEffect()會(huì)立即執(zhí)行回調(diào)函數(shù),如果在回調(diào)函數(shù)中進(jìn)行異步操作,需要謹(jǐn)慎處理,以免導(dǎo)致意外行為或副作用。

<script setup>
import { watchEffect } from 'vue'

// 它會(huì)自動(dòng)停止
watchEffect(() => {})

// ...這個(gè)則不會(huì)!
setTimeout(() => {
  watchEffect(() => {})
}, 100)
</script>

3. 避免無限循環(huán):當(dāng)在watchEffect()的回調(diào)中修改響應(yīng)式數(shù)據(jù)時(shí),可能會(huì)導(dǎo)致無限循環(huán)。要避免此問題,可以使用watch()函數(shù)并設(shè)置immediate: true選項(xiàng),或者使用ref來存儲(chǔ)臨時(shí)數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-593762.html

到了這里,關(guān)于Vue3的watchEffect的妙用,與watch的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue3學(xué)習(xí)——computed、watch、watchEffect

    與Vue2.x中computed配置功能一致 寫法 注意 監(jiān)視r(shí)eactive定義的響應(yīng)式數(shù)據(jù)時(shí):oldValue無法正確獲取、強(qiáng)制開啟了深度監(jiān)視(deep配置失效)。 監(jiān)視r(shí)eactive定義的響應(yīng)式數(shù)據(jù)中的某個(gè)屬性時(shí):deep配置有效。 情況一:監(jiān)視r(shí)ef定義的響應(yīng)式數(shù)據(jù) 監(jiān)視r(shí)ef定義的對象,改變某一個(gè)屬性時(shí),

    2024年02月22日
    瀏覽(21)
  • vue3的watchEffect和watch其他參數(shù)

    目錄 1、watchEffect基本使用 2、watch 與 watchEffect的異同 3、watch其他參數(shù)使用 1、watchEffect基本使用 1 回調(diào)函數(shù)立即調(diào)用 2 回調(diào)函數(shù)依賴的數(shù)據(jù)都會(huì)被監(jiān)控 3 深度監(jiān)控 2 、 watch 與 watchEffect的異同 1、 相同點(diǎn) :都可以對數(shù)據(jù)進(jìn)行偵聽 2、 不同點(diǎn) :watchEffect回調(diào)函數(shù)立即調(diào)用、對回調(diào)

    2024年01月24日
    瀏覽(20)
  • Vue3watch 和 watchEffect

    Vue3watch 和 watchEffect

    計(jì)算屬性是通過聲明性的計(jì)算衍生值,然而有些情況,我們需要在狀態(tài)變化時(shí)執(zhí)行一些\\\"副作用\\\",例如更改DOM,或是根據(jù)異步操作的結(jié)果去修改另一處的狀態(tài)。 一般來說,computed主要是涉及計(jì)算某些值的時(shí)候使用, watch(Effect)函數(shù)主要是監(jiān)聽某個(gè)狀態(tài),當(dāng)某個(gè)狀態(tài)改變時(shí)才會(huì)觸

    2024年02月20日
    瀏覽(22)
  • vue全家桶進(jìn)階之路32:Vue3 WatchEffect和watch 監(jiān)聽

    在 Vue 3 中, watchEffect 是一個(gè)用于監(jiān)聽響應(yīng)式數(shù)據(jù)變化的 API。它可以在函數(shù)內(nèi)部自動(dòng)跟蹤數(shù)據(jù)的依賴,并在依賴變化時(shí)重新運(yùn)行函數(shù)。 watchEffect ?的作用以及各個(gè)參數(shù)的功能講解: watchEffect(effect: (onInvalidate: InvalidateCbRegistrator) = void | (() = void) | Promisevoid, options?: WatchEffectOptio

    2023年04月17日
    瀏覽(23)
  • Vue3.0 watch和watchEffect監(jiān)聽器:VCA

    在項(xiàng)目中,有時(shí)候檢測一個(gè)變量的值是否反升了變化。通常使用的watch或者使用低效的循環(huán)判斷。 在次vue中給我們設(shè)置了深度監(jiān)測數(shù)據(jù)繁盛變化的方法。 1.vue中提供了在watch監(jiān)聽時(shí)設(shè)置deep:true 就可以實(shí)現(xiàn)對對象的深度監(jiān)聽; 2.immediate:true,代表watch里面聲明了之后會(huì)立馬執(zhí)行han

    2024年02月06日
    瀏覽(30)
  • 【Vue學(xué)習(xí)筆記5】Vue3中的響應(yīng)式:ref和reactive、watchEffect和watch

    【Vue學(xué)習(xí)筆記5】Vue3中的響應(yīng)式:ref和reactive、watchEffect和watch

    所謂響應(yīng)式就是界面和數(shù)據(jù)同步,能實(shí)現(xiàn)實(shí)時(shí)更新。 Vue 中用過三種響應(yīng)式解決方案,分別是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 vue3中實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的方法是使用ref和reactive。 reactive更推薦去定義復(fù)雜的數(shù)

    2024年02月03日
    瀏覽(32)
  • Vue Composition API之偵聽器watch/watchEffect

    Vue Composition API之偵聽器watch/watchEffect

    在日常的開發(fā)中,很多時(shí)候我們需要去對一些狀態(tài)進(jìn)行監(jiān)聽,比如當(dāng)顯示學(xué)生的成績列表時(shí),我們使用一個(gè)學(xué)生的學(xué)號student_num作為請求成績的參數(shù),如果沒有監(jiān)聽機(jī)制,當(dāng)學(xué)號student_num改變時(shí),我們需要依賴用戶的操作去刷新成績。但是有了偵聽器,我們可以通過偵聽器去監(jiān)

    2024年02月08日
    瀏覽(22)
  • Vue3前端開發(fā),watch數(shù)據(jù)偵聽器的立即執(zhí)行

    Vue3前端開發(fā),watch數(shù)據(jù)偵聽器的立即執(zhí)行

    Vue3前端開發(fā),watch數(shù)據(jù)偵聽器的立即執(zhí)行!實(shí)際上,我們可以通過回調(diào)函數(shù)的后面,再追加一個(gè)對象,來設(shè)置這個(gè)參數(shù),immediate:true.來實(shí)現(xiàn)一種立即執(zhí)行的效果。在頁面記載完成后,馬上就會(huì)執(zhí)行一次watch. 如上所示,我們在回調(diào)函數(shù)的后面,追加了一個(gè)參數(shù),是一個(gè)對象類型

    2024年01月18日
    瀏覽(28)
  • Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽

    Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽

    Vue3前端開發(fā),watch偵聽器的深度監(jiān)聽和精確監(jiān)聽!今天和大家分享的內(nèi)容是,關(guān)于watch的深度偵聽和精確監(jiān)聽。 首先看一下,第一個(gè)案例,練習(xí)的是,深度監(jiān)聽的效果。默認(rèn)是淺的偵聽,是不會(huì)觸發(fā)回調(diào)函數(shù)的。 如圖,當(dāng)我們點(diǎn)擊按鈕,修改num值的時(shí)候,觸發(fā)了回調(diào)函數(shù),在

    2024年01月23日
    瀏覽(20)
  • 【Vue3】vue3中的watchEffect使用及其他的API

    【Vue3】vue3中的watchEffect使用及其他的API

    目錄 ?一,watchEffect 二,生命周期 三,什么是hooks? 四,toRef ?五,其他組合式API 5.1shallowReactiveshallowRef 5.2readonlyshallowReadonly 5.3.toRawmarkRaw 5.4自定義Ref-customRef ?5.5provide$inject 5.6響應(yīng)式數(shù)據(jù)的判斷 寫在最后 ? ? 1.watch: 既要指明監(jiān)視的屬性,也要指明監(jiān)視的回調(diào)。 2.watchEffect: 不

    2024年02月01日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包