Vue3響應(yīng)式高階用法之markRaw()的使用
一、簡(jiǎn)介
在Vue3中,響應(yīng)式系統(tǒng)是其核心特性之一,它允許我們輕松地管理和更新應(yīng)用程序的狀態(tài)。然而,有時(shí)我們需要排除某些對(duì)象,使其不被響應(yīng)式系統(tǒng)追蹤。markRaw()
就是為此目的而設(shè)計(jì)的。本文將詳細(xì)介紹markRaw()
的作用、使用場(chǎng)景及最佳實(shí)踐。
二、使用場(chǎng)景
2.1 避免性能開(kāi)銷(xiāo)
在某些情況下,我們可能不希望某個(gè)對(duì)象被Vue的響應(yīng)式系統(tǒng)追蹤,以避免不必要的性能開(kāi)銷(xiāo)。例如,大型的第三方庫(kù)對(duì)象或不需要響應(yīng)式的靜態(tài)數(shù)據(jù)。
2.2 防止意外修改
有些對(duì)象在應(yīng)用程序的生命周期中不應(yīng)該被修改。通過(guò)markRaw()
可以確保這些對(duì)象不會(huì)被意外地轉(zhuǎn)換為響應(yīng)式,從而避免不必要的狀態(tài)變更。
三、基本使用
3.1 標(biāo)記對(duì)象
markRaw()
的主要作用是標(biāo)記一個(gè)對(duì)象,使其不再被reactive
或shallowReactive
轉(zhuǎn)換為響應(yīng)式代理。
<script lang="ts" setup> import { markRaw, reactive } from 'vue'; const someObject = { name: '天天鴨' }; const markedObject = markRaw(someObject); // 即使使用 reactive,markedObject 也不會(huì)變成響應(yīng)式 const state = reactive({ obj: markedObject }); </script>
在上面的例子中,markedObject
即使被包裹在reactive
中,也不會(huì)變成響應(yīng)式對(duì)象。
四、功能詳解
4.1 markRaw與reactive的區(qū)別
reactive
會(huì)將整個(gè)對(duì)象轉(zhuǎn)換為響應(yīng)式代理,而markRaw
則會(huì)阻止這種轉(zhuǎn)換。
4.2 markRaw與ref的區(qū)別
ref
主要用于創(chuàng)建一個(gè)響應(yīng)式引用,它可以封裝任何類(lèi)型的值如字符串、數(shù)字和對(duì)象。當(dāng)你將一個(gè)對(duì)象放入ref
時(shí),ref
本身依然是響應(yīng)式的,而markRaw
的作用是阻止對(duì)象被轉(zhuǎn)換為響應(yīng)式,這和ref
的設(shè)計(jì)不匹配。
<script lang="ts" setup> import { ref, markRaw } from 'vue'; const someObject = { name: '天天鴨' }; const rawObject = markRaw(someObject); const stateRef = ref(rawObject); // ref 本身是響應(yīng)式的,但 rawObject 不會(huì)被轉(zhuǎn)換為響應(yīng)式 stateRef.value.name = '天天鵝'; // 這不會(huì)觸發(fā)響應(yīng)式更新 </script>
五、最佳實(shí)踐及案例
5.1 使用大型第三方庫(kù)對(duì)象
在使用大型第三方庫(kù)(如圖表庫(kù)、地圖庫(kù))時(shí),可以使用markRaw()
避免這些對(duì)象被Vue的響應(yīng)式系統(tǒng)追蹤,從而提高性能。
<script lang="ts" setup> import { markRaw } from 'vue'; import * as echarts from 'echarts'; const chartInstance = markRaw(echarts.init(document.getElementById('chart'))); </script>
5.2 靜態(tài)配置數(shù)據(jù)
對(duì)于一些靜態(tài)配置數(shù)據(jù),可以使用markRaw()
確保它們不會(huì)被意外修改。
<script lang="ts" setup> import { markRaw } from 'vue'; const config = markRaw({ apiEndpoint: 'https://api.example.com', timeout: 5000 }); </script>
六、總結(jié)
markRaw()
是Vue3中一個(gè)非常有用的工具,特別是在需要控制對(duì)象的響應(yīng)式行為時(shí)。通過(guò)合理地使用markRaw()
,我們可以避免不必要的性能開(kāi)銷(xiāo)和防止意外的狀態(tài)變更,從而更好地管理應(yīng)用程序的狀態(tài)。
到此這篇關(guān)于Vue3響應(yīng)式高階用法之markRaw()的使用的文章就介紹到這了,更多相關(guān)Vue3 markRaw()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+Vite項(xiàng)目部署后刷新白屏問(wèn)題的解決方法
Vue3 + Vite 項(xiàng)目部署后出現(xiàn)了手動(dòng)刷新頁(yè)面時(shí)出現(xiàn)白屏的問(wèn)題,下面小編就來(lái)和大家探討一下白屏出現(xiàn)的原因以及具體的解決方法,需要的可以參考下2025-03-03vue基礎(chǔ)之data存儲(chǔ)數(shù)據(jù)及v-for循環(huán)用法示例
這篇文章主要介紹了vue基礎(chǔ)之data存儲(chǔ)數(shù)據(jù)及v-for循環(huán)用法,結(jié)合實(shí)例形式分析了vue.js使用data存儲(chǔ)數(shù)據(jù)、讀取數(shù)據(jù)及v-for遍歷數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下2019-03-03vue 使用lodash實(shí)現(xiàn)對(duì)象數(shù)組深拷貝操作
這篇文章主要介紹了vue 使用lodash實(shí)現(xiàn)對(duì)象數(shù)組深拷貝操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Vue實(shí)現(xiàn)調(diào)節(jié)窗口大小時(shí)觸發(fā)事件動(dòng)態(tài)調(diào)節(jié)更新組件尺寸的方法
今天小編就為大家分享一篇Vue實(shí)現(xiàn)調(diào)節(jié)窗口大小時(shí)觸發(fā)事件動(dòng)態(tài)調(diào)節(jié)更新組件尺寸的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09實(shí)現(xiàn)vuex與組件data之間的數(shù)據(jù)同步更新方式
今天小編就為大家分享一篇實(shí)現(xiàn)vuex與組件data之間的數(shù)據(jù)同步更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11