VueJs中的shallowRef與shallowReactive函數(shù)使用比較
前言
在vue3
當(dāng)中一些相似的組合式API
,如果沒有經(jīng)常使用,就會混淆,對于初學(xué)者,很是迷惑,比如:shallowRef
與shallowReactive
shallowRef
如果傳入基本數(shù)據(jù)類型,那么shallowRef
與ref
的作用基本沒有什么區(qū)別,也就是淺層的ref
的內(nèi)部值將會原樣的存儲和暴露,并不會被深層遞歸地轉(zhuǎn)為響應(yīng)式
但如果是對象的話,那么就存在區(qū)別了的,shallowRef
不處理對象類型的數(shù)據(jù)
其實(shí),它就是只處理基本數(shù)據(jù)類型的響應(yīng)式,不進(jìn)行對象的響應(yīng)式處理
性能優(yōu)化,應(yīng)用場景:如果有一個(gè)對象數(shù)據(jù),后續(xù)功能不會修改該對象中的屬性,而是生的對象來替換,那么就可以用shallowRef
shallowRef()
常常用于對大型數(shù)據(jù)結(jié)構(gòu)的性能優(yōu)化或是與外部的狀態(tài)管理系統(tǒng)集成
const state = shallowRef({ count: 1 }) // 不會觸發(fā)更改 state.value.count = 2 // 會觸發(fā)更改 state.value = { count: 2 }
shallowReactive
淺層作用的響應(yīng)式數(shù)據(jù)處理,也就是只處理第一層對象的數(shù)據(jù),在往下嵌套的數(shù)據(jù),操作數(shù)據(jù)是不起作用的
只考慮對象第一層的數(shù)據(jù)響應(yīng)式,在第一層嵌套下的數(shù)據(jù)不考慮
與reactive()
不同,沒有深層及的轉(zhuǎn)換,一個(gè)淺層響應(yīng)式對象里只有根級別的屬性是響應(yīng)式的,屬性的值會被原樣存儲和暴露,這意味著值為ref的屬性不會被自動解構(gòu)的
性能優(yōu)化:具體應(yīng)用場景:
如果有一個(gè)對象數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)比較深,復(fù)雜,但變化時(shí)只需要外層屬性變化,那么就可以使用shallowReactive
,如下示例代碼所示
const state = shallowReactive({ foo: 1, nested: { bar: 2 } }) // 更改狀態(tài)自身的屬性是響應(yīng)式的 state.foo++ // ...但下層嵌套對象不會被轉(zhuǎn)為響應(yīng)式 isReactive(state.nested) // false // 不是響應(yīng)式的 state.nested.bar++
總結(jié)
shallowReative
與shallowRef
在某些特殊的應(yīng)用場景下,是可以提升性能的,前者針對對象,用于淺層作用的響應(yīng)式數(shù)據(jù)處理,而后者只處理基本數(shù)據(jù)類型的響應(yīng)式,不進(jìn)行對象的響應(yīng)式處理
以上就是VueJs中的shallowRef與shallowReactive的使用比較的詳細(xì)內(nèi)容,更多關(guān)于Vue shallowRef shallowReactive的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Element Table的row-class-name無效與動態(tài)高亮顯示選中行背景色
這篇文章主要介紹了Element Table的row-class-name無效與動態(tài)高亮顯示選中行背景色,本文詳細(xì)的介紹了解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11ElementUI級聯(lián)選擇器實(shí)現(xiàn)同一父級下最多只能選中一個(gè)子級
本文主要介紹了ElementUI級聯(lián)選擇器實(shí)現(xiàn)同一父級下最多只能選中一個(gè)子級,同一父級下的子節(jié)點(diǎn)單選,又可以選擇多個(gè)不同父級下的節(jié)點(diǎn),具有一定參考價(jià)值,感興趣的可以了解一下2023-10-10vue3.0 CLI - 2.1 - component 組件入門教程
這篇文章主要介紹了vue3.0 CLI - 2.1 - component 組件入門教程,本文主要的關(guān)注點(diǎn)就是組件,本文通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09el-table多選toggleRowSelection不生效解決方案
這篇文章主要給大家介紹了關(guān)于el-table多選toggleRowSelection不生效的解決方案,文中通過圖文以及代碼將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08vue-router實(shí)現(xiàn)組件間的跳轉(zhuǎn)(參數(shù)傳遞)
這篇文章主要為大家詳細(xì)介紹了vue-router實(shí)現(xiàn)組件間的跳轉(zhuǎn),參數(shù)傳遞方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作
這篇文章主要介紹了vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09