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

Vue3watch 和 watchEffect

這篇具有很好參考價值的文章主要介紹了Vue3watch 和 watchEffect。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

watch 和 watchEffect

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

一般來說,computed主要是涉及計算某些值的時候使用,

watch(Effect)函數(shù)主要是監(jiān)聽某個狀態(tài),當某個狀態(tài)改變時才會觸發(fā)回調函數(shù)

watch參數(shù)(監(jiān)聽源,回調函數(shù),{immediate: '" ", deep: " "}

第一個參數(shù)可以是不同形式的“數(shù)據(jù)源”:
	它可以是一個 ref (包括計算屬性),不能是響應式對象的屬性值,解決方法就是用一個對象的屬性值的函數(shù)
	一個響應式對象
	一個 getter 函數(shù)、或多個數(shù)據(jù)源組成的數(shù)組:

const x = ref(0)
const y = ref(0)

// 單個 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}`)
  }
)

// 多個來源組成的數(shù)組
watch([x, () => y.value], ([newX, newY]) => {
  console.log(`x is ${newX} and y is ${newY}`)
})

const obj = reactive({ count: 0 })

// 錯誤,因為 watch() 得到的參數(shù)是一個 number
watch(obj.count, (count) => {
  console.log(`count is: ${count}`)
})
上述問題的解決方案:用一個返回該屬性的 getter 函數(shù):
// 提供一個 getter 函數(shù)
watch(
  () => obj.count,
  (count) => {
    console.log(`count is: ${count}`)
  }
)

watchEffect

立即執(zhí)行傳入的回調函數(shù),同時響應式的追蹤依賴,依賴改變就會重新運行函數(shù)

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

這個例子不用想watch一樣手動指定immediate:true,他會在組件首次渲染的時候就會執(zhí)行一次,并且自動追蹤todoId.value作為依賴,當todoId.value發(fā)生改變時,回調就會再次執(zhí)行。相對于watch,不用指定immediate配置項,且不用明確指定數(shù)據(jù)源todoId.value

對于只有一個依賴的例子來說,watchEffect的好處相對較小,但是對于有多個依賴項的偵聽器來說,使用watchEffect可以手動消除維護依賴列表的負擔。此外,如果你需要偵聽一個嵌套數(shù)據(jù)結構的幾個屬性,watchEffect可能比watch更有效,因為它將只跟蹤回調函數(shù)中使用到的屬性,而不是遞歸的跟蹤所有屬性。

Tips: watchEffect僅僅會在同步執(zhí)行期間追蹤依賴,當使用異步回調的時候,只有在第一個await正常工作前訪問的屬性才會被跟蹤

watch vs. watchEffect

watchwatchEffect 都能響應式地執(zhí)行有副作用的回調。它們之間的主要區(qū)別是追蹤響應式依賴的方式:

  • watch 只追蹤明確偵聽的數(shù)據(jù)源。它不會追蹤任何在回調中訪問到的東西。另外,僅在數(shù)據(jù)源確實改變時才會觸發(fā)回調。watch 會避免在發(fā)生副作用時追蹤依賴,因此,我們能更加精確地控制回調函數(shù)的觸發(fā)時機。
  • watchEffect,則會在副作用發(fā)生期間追蹤依賴。它會在同步執(zhí)行過程中,自動追蹤所有能訪問到的響應式屬性。這更方便,而且代碼往往更簡潔,但有時其響應性依賴關系會不那么明確

函數(shù)觸發(fā)時機

watchEffect 是一個副作用函數(shù), 在 DOM 掛載或更新之前就會觸發(fā)。

<template>
  <div>
    動物:
    <input id="ipt" v-model="fish.name" />
  </div>
</template>
<script lang="ts" setup>
import { reactive, watchEffect } from 'vue'
interface Animal {
  name: string
  type: string
}
let fish = reactive<Animal>({
  name: '酸菜魚',
  type: '又酸又菜又多余',
})
watchEffect<Animal>(() => {
  console.log('fish', fish.name)
  const ipt: HTMLElement = document.querySelector('#ipt') as HTMLElement
  console.log('ipt', ipt)
})
</script>

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iMUTAjBX-1680081569864)(C:\Users\26387\AppData\Roaming\Typora\typora-user-images\image-20230329164828475.png)]

第一次獲取到的元素是 null,執(zhí)行第二次監(jiān)聽的時候才會獲取到元素。

清除watchEffect的副作用的方法

通過flush:post 可以避免副作用,在 DOM 更新后運行副作用,確保模板引用與 DOM 保持同步,并引入正確元素。

或者使用watchPostEffect(),該函數(shù)和watctEffect()一樣,不同之處在于會直接在Vue 更新后執(zhí)行

import { watchPostEffect } from 'vue'
watchPostEffect(() => {
  /* 在 Vue 更新后執(zhí)行 */
})

vue3watch和watcheffech,Vue3,javascript,前端,vue.js

image-20230329165059064

?

? onTrack 和 onTrigger 用于調試一個偵聽器的行為。

? 清除副作用函數(shù)(onInvalidate)。

? watchEffect 的第一個參數(shù)回調函數(shù),也有自己的參數(shù) – onInvalidate。它也是一個函數(shù),用于清除 effect 產(chǎn)生的副作用

watchEffect<Type>(
  (oninvalidate) => {
    console.log('監(jiān)聽參數(shù)',)
    oninvalidate(() => {
      console.log('before')
    })
  }
  
  ....其他邏輯代碼
)

? oninvalidate 只作用于異步函數(shù),只有兩種情況才會被調用:

  • watchEffect 第一個參數(shù)是 effect 回調函數(shù),當 effect 被重新調用時。
  • 當監(jiān)聽器被注銷時。

watch的觸發(fā)時間是:監(jiān)聽某個特定屬性變化時,并能夠返回改變前后的值

停止偵聽器

一個關鍵點是,偵聽器必須用同步語句創(chuàng)建:如果用異步回調創(chuàng)建一個偵聽器,那么它不會綁定到當前組件上,你必須手動停止它,以防內存泄漏。如下方這個例子:

const unwatch = watchEffect(() => {})

// ...當該偵聽器不再需要時
unwatch()

注意,需要異步創(chuàng)建偵聽器的情況很少,請盡可能選擇同步創(chuàng)建。如果需要等待一些異步數(shù)據(jù),你可以使用條件式的偵聽邏輯:文章來源地址http://www.zghlxwxcb.cn/news/detail-829050.html

// 需要異步請求得到的數(shù)據(jù)
const data = ref(null)

watchEffect(() => {
  if (data.value) {
    // 數(shù)據(jù)加載后執(zhí)行某些操作...
  }
})

到了這里,關于Vue3watch 和 watchEffect的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Vue3學習——computed、watch、watchEffect

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

    2024年02月22日
    瀏覽(21)
  • vue3 computed 和 watch 的差異

    vue3 computed 和 watch 的差異

    ??博主:鍋蓋噠 ??文章核心: vue3 computed 和 watch 的差異 目錄 前言 用法 computed watch 代碼 理解 高質量的使用 Vue.js作為一種現(xiàn)代化的前端框架,提供了豐富的特性來幫助開發(fā)者構建高效和響應式的用戶界面。在這其中, computed 和 watch 是兩個非常重要的選項,它們都用于處理

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

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

    2024年01月24日
    瀏覽(20)
  • Vue3中watch與watchEffect的區(qū)別

    給大家打一個比喻 watch:教導主任叫老師看張三和李四是否在睡覺 watchEffect:教導主任叫老師看班上有誰在睡覺,在睡覺的就報告 1.都能監(jiān)聽響應式數(shù)據(jù)的變化,不同的是監(jiān)聽數(shù)據(jù)變化的方式不同 2.watch:要明確指出監(jiān)視的數(shù)據(jù) 3.watchEffect:不用明確的指出監(jiān)視的數(shù)據(jù)(函數(shù)中

    2024年02月21日
    瀏覽(17)
  • Vue3 —— watch 監(jiān)聽器及源碼學習

    該文章是在學習 小滿vue3 課程的隨堂記錄 示例均采用 script setup ,且包含 typescript 的基礎用法 在 vue3 中,必須是 ref 、 reactive 包裹起來的數(shù)據(jù),才可以被 watch 監(jiān)聽到 1、語法: watch(source, cb, options) source 是監(jiān)聽的目標,有 4 種書寫形式: reactive 形式的響應式數(shù)據(jù) ref 形式的響

    2024年02月12日
    瀏覽(23)
  • 【源碼系列#04】Vue3偵聽器原理(Watch)

    專欄分享:vue2源碼專欄,vue3源碼專欄,vue router源碼專欄,玩具項目專欄,硬核??推薦?? 歡迎各位ITer關注點贊收藏?????? 偵聽一個或多個響應式數(shù)據(jù)源,并在數(shù)據(jù)源變化時調用所給的回調函數(shù) 第一個參數(shù)可以是不同形式的“數(shù)據(jù)源”:它可以是一個 ref (包括計算屬性

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

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

    2023年04月17日
    瀏覽(23)
  • Vue3 watch 監(jiān)聽對象數(shù)組中對象的特定屬性

    在 Vue 3 中,可以使用 watch 函數(shù)來監(jiān)聽對象數(shù)組中對象的特定屬性??梢酝ㄟ^在回調函數(shù)中遍歷數(shù)組來檢查對象的特定屬性是否發(fā)生變化,并在變化發(fā)生時執(zhí)行相應的操作。 例如,假設有一個名為 items 的對象數(shù)組,其中每個對象都有一個名為 checked 的布爾屬性和一個名為 n

    2023年04月20日
    瀏覽(22)
  • Vue3的watchEffect的妙用,與watch的區(qū)別

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

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

    2024年02月16日
    瀏覽(21)
  • vue3 watch 監(jiān)聽多值以及深度監(jiān)聽用法

    1.監(jiān)聽單個值 引入: import {…, watch} from “vue”; import {useRouter} from ‘vue-router’; 2.監(jiān)聽多個值 還是上面路由的例子 2.深度監(jiān)聽

    2024年02月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包