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

vue3中的ref、isRef、shallowRef、triggerRef和customRef

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

1.ref

接受一個參數(shù)值并返回一個響應(yīng)式且可改變的 ref 對象。 ref 對象擁有一個指向內(nèi)部值的單一屬性 .value property ,指向內(nèi)部值。

例:此時,頁面上的 str1 也跟著變化

<template>
  <div>
    <button @click="handleClick">點擊</button>
  </div>
  <br />
  <div>str1:{{ str1 }}</div>
  <br />
</template>

<script setup lang="ts">
import { ref } from 'vue'

const str1 = ref('123')

const handleClick = () => {
  str1.value = '456'
  console.log(str1.value) // "456"
}
</script>

使用 ref 獲取 dom 元素:

<template>
  <div ref="divRef">
    <button @click="handleClick">點擊</button>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'

const divRef = ref(null) // 注意:此處的變量名必須和標(biāo)簽上的屬性名一致
onMounted(() => {
  console.log(divRef.value) // 輸出 <div></div>
})
const handleClick = () => {}
</script>

?結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

2.isRef

檢查一個對象是否為?ref?包裝過的對象。

<template>
  <div>
    <button @click="handleClick">點擊</button>
  </div>
  <br />
  <div>str1:{{ str1 }}</div>
  <br />
</template>

<script setup lang="ts">
import { ref, isRef } from 'vue'

const str1 = ref('123')

const handleClick = () => {
  str1.value = '456'
  console.log(str1.value) // "456"
  console.log(isRef(str1)) // true
}
</script>

3.shallowRef

創(chuàng)建一個跟蹤自身 .value 變化的 ref ,但不會使其值也變成響應(yīng)式的。

<template>
  <div>
    <button @click="handleClick">點擊</button>
  </div>
  <br />
  <div>str1:{{ str1 }}</div>
  <br />
  <div>str2:{{ str2 }}</div>
  <br />
  <div>str3:{{ obj.name }}</div>
</template>

<script setup lang="ts">
import { ref, isRef, shallowRef } from 'vue'

const str1 = ref('123')
const str2 = shallowRef('123')
const obj = shallowRef({ name: '張三' })

const handleClick = () => {
  obj.value.name = '李四'
  console.log(obj.value) // {name: '李四'}
  // str2.value = '456'
}
</script>

運行結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

頁面展示:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

需要注意的是:應(yīng)用 shallowRef 定義的基本值類型的數(shù)據(jù),是具有響應(yīng)式效果的,而引用類型不具有響應(yīng)式效果。在 Vue3 shallowRef 函數(shù)源碼中, value 具有響應(yīng)式,而 value 中的屬性不具有響應(yīng)式。與 ref 函數(shù)不同的是, shallowRef 函數(shù)不會將其值轉(zhuǎn)化為響應(yīng)式對象,而是直接將其作為普通的對象或數(shù)組來處理。這意味著,當(dāng)修改 shallowRef 對象的屬性或數(shù)組的元素時,? ?Vue3 將不會追蹤這些變化。?

注:由于 ref triggerRef 在使用時都會調(diào)用 triggerRefValue ,而?triggerRefValue 會調(diào)用 triggerEffects?更新依賴,所以直接將?shallowRef 的依賴一起更新了。因此使用?shallowRef 定義的數(shù)據(jù)不應(yīng)與使用 ref 定義的數(shù)據(jù)一起使用;應(yīng)用 shallowRef 定義為?值類型的常量?被修改時與定義為?引用類型的常量?也不應(yīng)一起使用!?。?/strong>

<template>
  <div>
    <button @click="handleClick">點擊</button>
  </div>
  <br />
  <div>str1:{{ str1 }}</div>
  <br />
  <div>str2:{{ str2 }}</div>
  <br />
  <div>str3:{{ obj.name }}</div>
</template>

<script setup lang="ts">
import { ref, shallowRef, triggerRef, customRef, onMounted } from 'vue'
const str1 = ref('123')
const str2 = shallowRef('123')
const obj = shallowRef({ name: '張三' })

const handleClick = () => {
  obj.value.name = '李四'
  console.log(obj.value)
  str2.value = '456'
}
</script>

點擊后結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

點擊事件部分代碼改為:

const handleClick = () => {
  str1.value = '456'
  console.log(str1.value)
  obj.value.name = '李四'
  console.log(obj.value)
}

點擊后結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

4.triggerRef

強制更新頁面 dom ,使其具有響應(yīng)式。

<template>
  <div >
    <button @click="handleClick">點擊</button>
  </div>
  <div>str3:{{ obj.name }}</div>
</template>

<script setup lang="ts">
import { ref, shallowRef, triggerRef } from 'vue'
const obj = shallowRef({ name: '張三' })

const handleClick = () => {
  obj.value.name = '李四'
  triggerRef(obj)
  console.log(obj.value)
}
</script>

點擊后結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript

5.customRef

Vue3 中,提供了一個 customRef?函數(shù),用于創(chuàng)建一個自定義的、可響應(yīng)的引用對象。與 ref?shallowRef 不同的是, customRef?可以自定義 get set 方法的實現(xiàn)邏輯,從而實現(xiàn)更加靈活的響應(yīng)式行為。

使用 customRef 函數(shù)創(chuàng)建的引用對象與 ref 對象類似,也具有 value 屬性,當(dāng)讀取這個屬性時,會觸發(fā) get 方法的執(zhí)行;當(dāng)修改這個屬性時,會觸發(fā) set 方法的執(zhí)行,并且會觸發(fā)相應(yīng)的依賴更新。與 ref 對象不同的是,?customRef 函數(shù)本身并不會對傳入的初始值進行處理,而是將其直接作為 get 方法的返回值,需要自己手動處理。

<template>
  <div>
    <button @click="handleClick">點擊</button>
  </div>
  <div>name:{{ name }}</div>
</template>

<script setup lang="ts">
import { customRef} from 'vue'

function myRef<T = any>(value: T) {
  let timer: any
  return customRef((track, trigger) => {
    return {
      get() {
        track()
        return value
      },
      set(newVal) {
        clearTimeout(timer)
        timer = setTimeout(() => {
          console.log('觸發(fā)了set')
          value = newVal
          trigger()
        }, 500)
      }
    }
  })
}

const name = myRef<string>('張三')

const handleClick = () => {
  name.value = '李四'
}
</script>

?點擊500ms后結(jié)果:

vue3中的ref、isRef、shallowRef、triggerRef和customRef,vue.js,前端,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-861523.html

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

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

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

相關(guān)文章

  • vue3動態(tài)組件組件shallowRef包裹問題

    在vue3做tabs切換功能的時候,如果導(dǎo)入的組件不適用shallowRef包裹會顯示下面的警告: 根據(jù)提示代碼修改如下: 就能解決上面的問題。

    2024年02月22日
    瀏覽(23)
  • 玩轉(zhuǎn)Vue3之shallowRef和shallowReactive

    Vue3 作為一款現(xiàn)代的 JavaScript 框架,引入了許多新的特性和改進,其中包括 shallowRef 和 shallowReactive 。這兩個功能在 Vue 3 中提供了更加靈活和高效的狀態(tài)管理選項,尤其適用于大型和復(fù)雜的應(yīng)用程序。 Vue3 引入了新的響應(yīng)式系統(tǒng),與 Vue2 相比,它具有更好的性能和更多的功能

    2024年03月13日
    瀏覽(18)
  • Vue3通透教程【五】Vue3中的響應(yīng)式數(shù)據(jù) reactive函數(shù)、ref函數(shù)

    專欄介紹: 涼哥作為 Vue 的忠實粉絲輸出過大量的 Vue 文章,應(yīng)粉絲要求開始更新 Vue3 的相關(guān)技術(shù)文章,Vue 框架目前的地位大家應(yīng)該都曉得,所謂三大框架使用人數(shù)最多,公司選型最多的框架,涼哥之前在文章中也提到過就是 Vue 框架之所以火起來的原因,和 Vue 框架相比其他

    2024年01月24日
    瀏覽(27)
  • vue3中的reactive、ref、toRef和toRefs

    reactive用于創(chuàng)建響應(yīng)式對象,它返回一個對象的響應(yīng)式代理。即:它返回的對象以及其中嵌套的對象都會通過 Proxy 包裹;當(dāng)響應(yīng)式對象被訪問時,觸發(fā)getter方法;當(dāng)響應(yīng)式對象被修改時,觸發(fā)setter方法。在使用響應(yīng)式對象時,我們可以像普通對象一樣訪問和修改數(shù)據(jù)。 使用

    2024年02月08日
    瀏覽(23)
  • Vue3中的Ref與Reactive:深入理解響應(yīng)式編程

    Vue 3是一個功能強大的前端框架,它引入了一些令人興奮的新特性,其中最引人注目的是 ref 和 reactive 。這兩個API是Vue 3中響應(yīng)式編程的核心,本文將深入探討它們的用法和差異。 在Vue中,響應(yīng)式編程是一種使數(shù)據(jù)與UI保持同步的方式。當(dāng)數(shù)據(jù)變化時,UI會自動更新,反之亦然

    2024年02月08日
    瀏覽(31)
  • Vue3中的`ref`和`reactive使用中遇到的一些坑

    以下是一些常見的問題和解決方法: 同時使用 ref 和 reactive :在Vue3中, ref 和 reactive 是兩種不同的數(shù)據(jù)響應(yīng)方式。 ref 用于包裝基本類型數(shù)據(jù),而 reactive 用于包裝對象。如果在同一個變量上同時使用 ref 和 reactive ,可能會導(dǎo)致數(shù)據(jù)的不一致性和混亂。因此,應(yīng)該根據(jù)變量的

    2024年01月24日
    瀏覽(48)
  • 【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ù)同步,能實現(xiàn)實時更新。 Vue 中用過三種響應(yīng)式解決方案,分別是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 vue3中實現(xiàn)響應(yīng)式數(shù)據(jù)的方法是使用ref和reactive。 reactive更推薦去定義復(fù)雜的數(shù)

    2024年02月03日
    瀏覽(32)
  • Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

    Vue3技術(shù)6之toRef和toRefs、shallowReactive與shallowRef、readonly與shallowReadonly

    App.vue Demo.vue 原理: App.vue DemoTwo.vue 作用:創(chuàng)建一個ref對象,其value值指向另一個對象中的某個屬性 語法: const name=toRef(person,‘name’) 應(yīng)用:要將響應(yīng)式對象中的某個屬性單獨提供給外部使用時 擴展: toRefs 與 toRef 功能一致,但可以批量創(chuàng)建多個ref 對象,語法: toRefs(perso

    2023年04月24日
    瀏覽(17)
  • Vue3:ref(‘ ‘)、ref(null)與ref()

    Vue3:ref(‘ ‘)、ref(null)與ref()

    今天在分析項目源碼的時候偶然發(fā)現(xiàn)之前的程序員在通過ref獲取子組件的方法的時候,總是喜歡用ref(null),什么意思呢 就是我引用了一個組件,并且想要使用組件內(nèi)的value,那么常規(guī)操作就是 import 組件名 from \\\'組件的路徑\\\' ,然后再在 template 模板中加上組件的標(biāo)簽,即 組件

    2024年02月14日
    瀏覽(19)
  • vue3 ref()

    通常我們在獲取子組件的數(shù)據(jù)和方法的操作 解決??ref 對子組件進行數(shù)據(jù)的獲取以及方法的觸發(fā) 不同? 需要在子組件 通過defineExpose進行方法的,數(shù)據(jù)的 暴露 案例? ?父組件 子組件

    2024年02月13日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包