vue3 toRaw與markRaw

Vue3.0給我們提供的這兩個方法,toRaw方法是把被reactive或readonly后的Proxy對象轉換為原來的target對象,而markRaw則直接讓target不能被reactive或readonly。

toRaw

作用原理:
1.toRaw
  從Reactive 或 Ref中得到原始數據
2.toRaw作用
  做一些不想被監(jiān)聽的事情(提升性能)

// ref/reactive數據類型的特點:
// 每次修改都會被追蹤, 都會更新UI界面, 但是這樣其實是非常消耗 性能的
// 所以如果我們有一些操作不需要追蹤, 不需要更新UI界面, 那么這個時候,
// 我們就可以通過toRaw方法拿到它的原始數據, 對原始數據進行修改
// 這樣就不會被追蹤, 這樣就不會更新UI界面, 這樣性能就好了

// ref本質: reactive   ref(obj) -> reactive({value: obj})

let state = reactive(
     {name:'lnj', age:18}
);
// 獲取state的源數據
let obj2 = toRaw(state);

// console.log({name:'lnj', age:18} === obj2); // true
// console.log({name:'lnj', age:18} === state); // false

function myFn() {
    // 獲取的源數據更改,不會觸發(fā)頁面更新
    obj2.name = 'zs';
    console.log(obj2); // {name: "zs", age: 18}
     // state.name = 'zs';
     // console.log(state);// {name: "zs", age: 18}
}
markRow

將數據標記為永遠不能追蹤的數據, 一般在編寫自己的第三方庫時使用

let obj = {name: 'lnj', age: 18};
// 不能追蹤,監(jiān)聽,作為響應式的數據
obj = markRaw(obj);
let state = reactive(obj);
function myFn() {
  // 數據更改了,但是頁面ui還是沒有發(fā)生改變
  state.name = 'zs';
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容