重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
這篇文章主要講解了“vue函數(shù)toRaw()和markRaw()怎么使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“vue函數(shù)toRaw()和markRaw()怎么使用”吧!
成都創(chuàng)新互聯(lián)公司網(wǎng)絡(luò)公司擁有10多年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗,上千客戶的共同信賴。提供網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、網(wǎng)站定制、友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計師打造企業(yè)風格,提供周到的售前咨詢和貼心的售后服務(wù)
針對一些特殊的需求,在項目里,需要將響應(yīng)式數(shù)據(jù)變?yōu)槠胀ㄔ碱愋蛿?shù)據(jù),這種情況是有的。
在Vue
里,能夠?qū)⑵胀〝?shù)據(jù)類型的數(shù)據(jù)變?yōu)轫憫?yīng)式數(shù)據(jù);同時,也能將響應(yīng)式類型數(shù)據(jù)變?yōu)槠胀愋蛿?shù)據(jù)
可以用于提升數(shù)據(jù)的性能
接收一個reactive
響應(yīng)式數(shù)據(jù),將一個響應(yīng)式的數(shù)據(jù)變?yōu)槠胀愋偷臄?shù)據(jù),轉(zhuǎn)化為非響應(yīng)式數(shù)據(jù),相當于還原對象,reactive
相當于制作,但對于ref
響應(yīng)式數(shù)據(jù)不起作用。
將一個由reactive
生成的響應(yīng)式對象轉(zhuǎn)為普通(原始)對象
toRaw()
可以返回由reactive()
、readonly()
、shallowReactive()
或shallowReadonly()
創(chuàng)建的代理對應(yīng)的原始對象
這是一個可以用臨時讀取而不引起代理訪問/跟蹤開銷,或是寫入而不觸發(fā)更改的特殊方法,在官方文檔里,是不建議保存對原始對象的持久引用
使用場景:用于讀取響應(yīng)式對象的普通對象,對這個普通對象的所有操作,不會引起頁面的更新
const foo = {}
const reactiveFoo = reactive(foo)
console.log(toRaw(reactiveFoo) === foo) // true
注意
針對對象,后續(xù)動態(tài)新增的屬性,如果沒有把整個對象對外暴露出去,模板中使用新增的變量是不生效的(針對setup
函數(shù)形式)
接收一個原始數(shù)據(jù),標記一個對象,使它永遠不會再成為響應(yīng)式對象,也就是數(shù)據(jù)在邏輯中即使修改變化了,但是頁面不會更新變化
將一個對象標記為不可被轉(zhuǎn)為代理,返回該對象本身
應(yīng)用場景:
[1]. 有些值不應(yīng)該被設(shè)置為響應(yīng)式的,例如復(fù)雜的第三方類庫或Vue
組件對象
[2]. 當渲染具有不可變數(shù)據(jù)源的大列表時,跳過響應(yīng)式轉(zhuǎn)換可以提高性能
const foo = markRaw({})
console.log(isReactive(reactive(foo))) // false
// 也適用于嵌套在其他響應(yīng)性對象
const bar = reactive({ foo })
console.log(isReactive(bar.foo)) // false
markRaw()
與shallowReactive()
這樣淺層式API
使你可以有選擇的避開默認的深度響應(yīng)/只讀轉(zhuǎn)換,并在狀態(tài)關(guān)系譜中嵌入原始,非代理的對象
如果把一個嵌套的,沒有標記的原始對象設(shè)置成一個響應(yīng)式對象,然后再次訪問它,你獲取到的是代理的版本,這可能會導(dǎo)致對象身份風險
即執(zhí)行一個依賴于對象身份的操作,但卻同時使用了同一對象的原始版本和代理版本
const foo = markRaw({
nested: {}
})
const bar = reactive({
// 盡管 `foo` 被標記為了原始對象,但 foo.nested 卻沒有
nested: foo.nested
})
console.log(foo.nested === bar.nested) // false
感謝各位的閱讀,以上就是“vue函數(shù)toRaw()和markRaw()怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對vue函數(shù)toRaw()和markRaw()怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!