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';
}