VueJs中的shallowRef與shallowReactive函數(shù)使用比較
前言
在vue3當(dāng)中一些相似的組合式API,如果沒有經(jīng)常使用,就會(huì)混淆,對(duì)于初學(xué)者,很是迷惑,比如:shallowRef與shallowReactive
shallowRef
如果傳入基本數(shù)據(jù)類型,那么shallowRef與ref的作用基本沒有什么區(qū)別,也就是淺層的ref的內(nèi)部值將會(huì)原樣的存儲(chǔ)和暴露,并不會(huì)被深層遞歸地轉(zhuǎn)為響應(yīng)式
但如果是對(duì)象的話,那么就存在區(qū)別了的,shallowRef不處理對(duì)象類型的數(shù)據(jù)
其實(shí),它就是只處理基本數(shù)據(jù)類型的響應(yīng)式,不進(jìn)行對(duì)象的響應(yīng)式處理
性能優(yōu)化,應(yīng)用場(chǎng)景:如果有一個(gè)對(duì)象數(shù)據(jù),后續(xù)功能不會(huì)修改該對(duì)象中的屬性,而是生的對(duì)象來替換,那么就可以用shallowRef
shallowRef() 常常用于對(duì)大型數(shù)據(jù)結(jié)構(gòu)的性能優(yōu)化或是與外部的狀態(tài)管理系統(tǒng)集成
const state = shallowRef({ count: 1 })
// 不會(huì)觸發(fā)更改
state.value.count = 2
// 會(huì)觸發(fā)更改
state.value = { count: 2 }
shallowReactive
淺層作用的響應(yīng)式數(shù)據(jù)處理,也就是只處理第一層對(duì)象的數(shù)據(jù),在往下嵌套的數(shù)據(jù),操作數(shù)據(jù)是不起作用的
只考慮對(duì)象第一層的數(shù)據(jù)響應(yīng)式,在第一層嵌套下的數(shù)據(jù)不考慮
與reactive()不同,沒有深層及的轉(zhuǎn)換,一個(gè)淺層響應(yīng)式對(duì)象里只有根級(jí)別的屬性是響應(yīng)式的,屬性的值會(huì)被原樣存儲(chǔ)和暴露,這意味著值為ref的屬性不會(huì)被自動(dòng)解構(gòu)的
性能優(yōu)化:具體應(yīng)用場(chǎng)景:
如果有一個(gè)對(duì)象數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)比較深,復(fù)雜,但變化時(shí)只需要外層屬性變化,那么就可以使用shallowReactive,如下示例代碼所示
const state = shallowReactive({
foo: 1,
nested: {
bar: 2
}
})
// 更改狀態(tài)自身的屬性是響應(yīng)式的
state.foo++
// ...但下層嵌套對(duì)象不會(huì)被轉(zhuǎn)為響應(yīng)式
isReactive(state.nested) // false
// 不是響應(yīng)式的
state.nested.bar++
總結(jié)
shallowReative與shallowRef在某些特殊的應(yīng)用場(chǎng)景下,是可以提升性能的,前者針對(duì)對(duì)象,用于淺層作用的響應(yīng)式數(shù)據(jù)處理,而后者只處理基本數(shù)據(jù)類型的響應(yīng)式,不進(jìn)行對(duì)象的響應(yīng)式處理
以上就是VueJs中的shallowRef與shallowReactive的使用比較的詳細(xì)內(nèi)容,更多關(guān)于Vue shallowRef shallowReactive的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue 封裝自定義組件之tabal列表編輯單元格組件實(shí)例代碼
這篇文章主要介紹了vue 封裝自定義組件tabal列表編輯單元格組件實(shí)例代碼,需要的朋友可以參考下2017-09-09
vue3中?provide?和?inject?用法小結(jié)
父子組件傳遞數(shù)據(jù)時(shí),使用的是props和emit,父?jìng)髯訒r(shí),使用的是?props,如果是父組件傳孫組件時(shí),就需要先傳給子組件,子組件再傳給孫組件,如果多個(gè)子組件或多個(gè)孫組件使用時(shí),就需要傳很多次,會(huì)很麻煩,這篇文章主要介紹了vue3中?provide?和?inject?用法,需要的朋友可以參考下2023-11-11
解決vue組件沒顯示,沒起作用,沒報(bào)錯(cuò),但該顯示的組件沒顯示問題
這篇文章主要介紹了解決vue組件沒顯示,沒起作用,沒報(bào)錯(cuò),但該顯示的組件沒顯示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Vue鼠標(biāo)滾輪滾動(dòng)切換路由效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue鼠標(biāo)滾輪滾動(dòng)切換路由效果的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Element的el-tree控件后臺(tái)數(shù)據(jù)結(jié)構(gòu)的生成以及方法的抽取
這篇文章主要介紹了Element的el-tree控件后臺(tái)數(shù)據(jù)結(jié)構(gòu)的生成以及方法的抽取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
基于vue2.0實(shí)現(xiàn)的級(jí)聯(lián)選擇器
這篇文章主要介紹了基于vue2.0實(shí)現(xiàn)的級(jí)聯(lián)選擇器,基于Vue的級(jí)聯(lián)選擇器,可以單項(xiàng),二級(jí), 三級(jí)級(jí)聯(lián),多級(jí)級(jí)聯(lián),有興趣可以了解一下2017-06-06

