Vue3:響應(yīng)式 API-進(jìn)階toRaw()和markRaw()

在Vue3中,響應(yīng)式系統(tǒng)是其核心特性之一。我們通過reactive()和ref(),可以輕松地創(chuàng)建響應(yīng)式數(shù)據(jù)對象,從而實現(xiàn)數(shù)據(jù)驅(qū)動的視圖更新。但是,有時我們需要訪問這些響應(yīng)式對象的原始值,這時候toRaw()和markRaw()就來滿足我們的需求。

toRaw()

根據(jù)一個 Vue 創(chuàng)建的代理返回其原始對象。
詳細(xì)信息
toRaw() 可以返回由 reactive()、readonly()、shallowReactive() 或者 shallowReadonly() 創(chuàng)建的代理對應(yīng)的原始對象。把響應(yīng)式對象,變成普通對象。對這個普通對象的操作,不會使頁面更新。
注意事項:
1、使用toRaw()獲取的原始對象將不再具有響應(yīng)性。
2、修改原始對象不會觸發(fā)視圖更新。
3、toRaw()適用于性能優(yōu)化和與外部庫的集成。
4、不建議保存對原始對象的持久引用,請謹(jǐn)慎使用。

markRaw()

將一個對象標(biāo)記為不可被轉(zhuǎn)為代理。返回該對象本身。
詳細(xì)信息
toRaw()reactive()響應(yīng)式對象,變成普通對象,用于讀取響應(yīng)式對象對應(yīng)的普通對象,對這個普通對象的操作,不會使頁面更新。

const foo = markRaw({})
console.log(isReactive(reactive(foo))) // false

// 也適用于嵌套在其他響應(yīng)性對象
const bar = reactive({ foo })
console.log(isReactive(bar.foo)) // false

注意事項:

const foo = markRaw({
  nested: {}
})

const bar = reactive({
  // 盡管 `foo` 被標(biāo)記為了原始對象,但 foo.nested 卻沒有
  nested: foo.nested
})

console.log(foo.nested === bar.nested) // false
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容