您好,登錄后才能下訂單哦!
這篇文章主要介紹了vue函數toRaw和markRaw如何使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue函數toRaw和markRaw如何使用文章都會有所收獲,下面我們一起來看看吧。
接收一個reactive
響應式數據,將一個響應式的數據變為普通類型的數據,轉化為非響應式數據,相當于還原對象,reactive
相當于制作,但對于ref
響應式數據不起作用
將一個由reactive
生成的響應式對象轉為普通(原始)對象
toRaw()
可以返回由reactive()
,readonly()
,shallowReactive()
或shallowReadonly()
創建的代理對應的原始對象
這是一個可以用臨時讀取而不引起代理訪問/跟蹤開銷,或是寫入而不觸發更改的特殊方法,在官方文檔里,是不建議保存對原始對象的持久引用
使用場景:用于讀取響應式對象的普通對象,對這個普通對象的所有操作,不會引起頁面的更新
const foo = {} const reactiveFoo = reactive(foo) console.log(toRaw(reactiveFoo) === foo) // true
注意
針對對象,后續動態新增的屬性,如果沒有把整個對象對外暴露出去,模板中使用新增的變量是不生效的(針對setup
函數形式)
接收一個原始數據,標記一個對象,使它永遠不會再成為響應式對象,也就是數據在邏輯中即使修改變化了,但是頁面不會更新變化
將一個對象標記為不可被轉為代理,返回該對象本身
應用場景:
[1]. 有些值不應該被設置為響應式的,例如復雜的第三方類庫或Vue
組件對象
[2]. 當渲染具有不可變數據源的大列表時,跳過響應式轉換可以提高性能
const foo = markRaw({}) console.log(isReactive(reactive(foo))) // false // 也適用于嵌套在其他響應性對象 const bar = reactive({ foo }) console.log(isReactive(bar.foo)) // false
markRaw()
與shallowReactive()
這樣淺層式API
使你可以有選擇的避開默認的深度響應/只讀轉換,并在狀態關系譜中嵌入原始,非代理的對象
如果把一個嵌套的,沒有標記的原始對象設置成一個響應式對象,然后再次訪問它,你獲取到的是代理的版本,這可能會導致對象身份風險
即執行一個依賴于對象身份的操作,但卻同時使用了同一對象的原始版本和代理版本
const foo = markRaw({ nested: {} }) const bar = reactive({ // 盡管 `foo` 被標記為了原始對象,但 foo.nested 卻沒有 nested: foo.nested }) console.log(foo.nested === bar.nested) // false
關于“vue函數toRaw和markRaw如何使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue函數toRaw和markRaw如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。