溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

vue?shallowRef作用及引發(fā)的問題怎么解決

發(fā)布時間:2022-08-29 16:39:15 來源:億速云 閱讀:276 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“vue shallowRef作用及引發(fā)的問題怎么解決”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

shallowRef是什么

最近在開發(fā)遇到一個問題,使用shallowRef居然導(dǎo)致視圖更新了,這一看把我也給搞懵了,后來便仔細看了看文檔,現(xiàn)在來總結(jié)一下。

ref是一個定義響應(yīng)式的API,可以通過訪問.value屬性修改并更新到視圖上。

但是shallowRef并不會被深層遞歸成響應(yīng)式,也就是說使用.value.屬性是不會更新到試圖上的。只能是替換整個.value才會更新。

那么我們現(xiàn)在遇到的問題是怎么樣導(dǎo)致的呢?

發(fā)現(xiàn)問題

通過我去注釋代碼,最后只剩下幾行代碼,通過一個小例子來看看: 比如:

<script setup>
import {  shallowRef } from 'vue'
let shallowValue = shallowRef({
    age: 10
})
const change = () => {
    shallowValue.value.age= 20;
    console.log(shallowValue.value) // {age:20}
}
</script>
<template>
    <h2>{{ shallowValue }}</h2>
    <button @click="change">change shallowRef</button>
</template>

vue?shallowRef作用及引發(fā)的問題怎么解決

現(xiàn)在是這樣的,當我們點擊按鈕時,打印出shallowValue的會發(fā)現(xiàn)更新啦,但是視圖并未更新。

再定義一個ref值。同樣在點擊按鈕觸發(fā)的函數(shù)里面改變ref的值。會發(fā)現(xiàn)不僅是ref的值更新啦,shallowRef的值也更新啦。

vue?shallowRef作用及引發(fā)的問題怎么解決

這是怎么回事呢?

我們在瀏覽debug一下,發(fā)現(xiàn)執(zhí)行refValue.value觸發(fā)set函數(shù)時同時一會觸發(fā)triggerRefValue函數(shù)。

vue?shallowRef作用及引發(fā)的問題怎么解決

triggerRefValue函數(shù)又是什么東東?

triggerRefValue與triggerRef

說到triggerRefValue就可以提到triggerRef(), triggerRef()會強制觸發(fā)依賴于一個shallowRef,同時會更新視圖.

<script setup>
import { shallowRef,triggerRef } from 'vue'
let refValue = ref("ref舊值")
let shallowValue = shallowRef({
    age: 10
})
const change = () => {
    shallowValue.value.age= 20;
    triggerRef(shallowValue)
    // refValue.value = 'ref的新值'
    console.log(shallowValue.value)
}
</script>
<template>
    <h2>ref的值:{{refValue}}</h2>
    <h2>{{ shallowValue }}</h2>
    <button @click="change">change shallowRef</button>
</template>

點擊按鈕時會發(fā)現(xiàn)視圖同時也會更新。

vue?shallowRef作用及引發(fā)的問題怎么解決

解決問題

現(xiàn)在我們回到剛才的那個問題,說到triggerRefValuetriggerRef,那他們倆是什么關(guān)系呢? 在觸發(fā)triggerRefValue下面有段代碼。

vue?shallowRef作用及引發(fā)的問題怎么解決

就是triggerRef函數(shù),而這個函數(shù)里面就一行代碼,就是triggerRefValue函數(shù),所以說triggerRef的核心功能就是triggerRefValue函數(shù)來做的,上面說到triggerRef會強制觸發(fā)視圖更新,就等于是triggerRefValue強制視圖更新啦。

以至于在點擊按鈕時修改ref的值觸發(fā)了triggerRefValue函數(shù),間接影響到了shallowRef的值,才會使視圖更新。

“vue shallowRef作用及引發(fā)的問題怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI