首先我們先了解一下這三個函數的定義以及區別
markRow
定義:
一個用于標記對象為非響應式的工具函數
shallowRef
定義:
一個用于創建淺層響應式引用的函數,只對 .value 本身進行響應式處理,不會遞歸地將 .value 指向的對象或數組的內部屬性轉換為響應式。
shallowReactive
定義:
一個用于創建淺層響應式對象的函數,只對對象的最外層屬性進行響應式處理,不會遞歸地將內部屬性轉換為響應式。
作用及使用場景
markRaw:
在項目中我們經常會有使用到動態組件的時候,而在將單文件組件SFC賦值給一個變量時,如果我們使用ref或者reactive方法處理組件,通常瀏覽器會給出一個警告信息
[Vue warn]: Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref
原因是如果組件實例被代理為響應式對象,可能會導致不必要的更新造成的性能損耗,這個時候我們通常可以用markRaw方法代替ref
shallowRef:
在項目中我們處理一個變量時,經常會需要對整個對象做整體替換,例如一個圖片輪播組件,每次切換圖片,數據整體都會發生變化,那我們不需要去追蹤數據內部屬性的響應式變化時,我們可以使用shallowRef來代替ref做一些性能優化的處理
shallowReactive:
shallowReactive與shallowRef作用類似,一個只能處理引用類型數據,一個可以處理基礎類型數據