您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“vue shallowRef作用及引發(fā)的問題怎么解決”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
最近在開發(fā)遇到一個問題,使用shallowRef
居然導(dǎo)致視圖更新了,這一看把我也給搞懵了,后來便仔細看了看文檔,現(xiàn)在來總結(jié)一下。
ref
是一個定義響應(yīng)式的API
,可以通過訪問.value
屬性修改并更新到視圖上。
但是shallowRef
并不會被深層遞歸成響應(yīng)式,也就是說使用.value.屬性
是不會更新到試圖上的。只能是替換整個.value
才會更新。
那么我們現(xiàn)在遇到的問題是怎么樣導(dǎo)致的呢?
通過我去注釋代碼,最后只剩下幾行代碼,通過一個小例子來看看: 比如:
<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>
現(xiàn)在是這樣的,當我們點擊按鈕時,打印出shallowValue
的會發(fā)現(xiàn)更新啦,但是視圖并未更新。
再定義一個ref
值。同樣在點擊按鈕觸發(fā)的函數(shù)里面改變ref
的值。會發(fā)現(xiàn)不僅是ref
的值更新啦,shallowRef
的值也更新啦。
這是怎么回事呢?
我們在瀏覽debug
一下,發(fā)現(xiàn)執(zhí)行refValue.value
觸發(fā)set
函數(shù)時同時一會觸發(fā)triggerRefValue
函數(shù)。
那triggerRefValue
函數(shù)又是什么東東?
說到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)視圖同時也會更新。
現(xiàn)在我們回到剛才的那個問題,說到triggerRefValue
與triggerRef
,那他們倆是什么關(guān)系呢? 在觸發(fā)triggerRefValue
下面有段代碼。
就是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ì)量的實用文章!
免責(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)容。