vue3中markRaw示例詳解
在 Vue 3 中,markRaw 是一個用于告訴 Vue 的響應性系統(tǒng)不要對某個對象進行轉換或追蹤其響應性的函數(shù)。當你有一個對象,并且你確定你不需要它成為響應性對象時,你可以使用 markRaw 來標記它。這在一些場景中非常有用,比如當你需要集成一個第三方庫或插件,并且這個庫或插件的某些部分不需要是響應性的。
下面是一個詳細的示例,展示了如何在 Vue 3 中使用 markRaw:
import { reactive, markRaw, toRefs } from 'vue';
// 創(chuàng)建一個普通的 JavaScript 對象
const rawObject = {
name: 'Raw Object',
value: 'This is a raw object and it will not be reactive.'
};
// 使用 markRaw 標記這個對象,使其保持原樣
const markedRawObject = markRaw(rawObject);
// 創(chuàng)建一個響應性對象
const state = reactive({
// 將標記過的 rawObject 放入響應性對象中
markedRawObject,
// 另一個普通的對象,它會被轉換為響應性對象
reactiveObject: {
name: 'Reactive Object',
value: 'This is a reactive object and it will track changes.'
}
});
// 在組件中使用這些對象
export default {
setup() {
// 使用 toRefs 來解構響應性對象的屬性,以便在模板中直接使用
const { markedRawObject, reactiveObject } = toRefs(state);
// 由于 markedRawObject 是被 markRaw 標記過的,修改它不會觸發(fā) Vue 的響應性系統(tǒng)
markedRawObject.value.name = 'Modified Raw Object'; // 這不會觸發(fā)更新
// 修改 reactiveObject 則會觸發(fā) Vue 的響應性更新
reactiveObject.value.name = 'Modified Reactive Object'; // 這會觸發(fā)更新
// 返回這些屬性,以便在模板中使用
return {
markedRawObject,
reactiveObject
};
}
};在上面的代碼中,我們創(chuàng)建了一個普通的 JavaScript 對象 rawObject,并使用 markRaw 函數(shù)將其標記為原樣對象。然后,我們將這個標記過的對象放入一個響應性對象 state 中。在組件的 setup 函數(shù)中,我們解構出 markedRawObject 和 reactiveObject,并嘗試修改它們的屬性。由于 markedRawObject 是被 markRaw 標記過的,所以修改它的屬性不會觸發(fā) Vue 的響應性系統(tǒng)。而修改 reactiveObject 的屬性則會觸發(fā)響應性更新。
在模板中,你可以像這樣使用這些屬性:
<template>
<div>
<p>Marked Raw Object: {{ markedRawObject.name }} - {{ markedRawObject.value }}</p>
<p>Reactive Object: {{ reactiveObject.name }} - {{ reactiveObject.value }}</p>
</div>
</template>請注意,即使 markedRawObject 的屬性在模板中顯示出來了,但由于它是原樣對象,所以對其屬性的修改不會觸發(fā)視圖的更新。而 reactiveObject 的屬性修改則會觸發(fā)視圖的更新。
markRaw 的主要用途是當你確定某個對象不需要響應性時,避免不必要的性能開銷和潛在的錯誤。這在處理第三方庫、大型數(shù)據(jù)對象或性能敏感的場景中特別有用。
到此這篇關于vue3中markRaw示例詳解的文章就介紹到這了,更多相關vue3 markRaw內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

