Vue六大基本類型中的原始值響應(yīng)式
所謂原始值即針對六大基本類型的值的響應(yīng)式
ref
由于 proxy 無法阻止原始值的修改,故此方法在這里不管用
我們可以創(chuàng)建一個包裹對象把原始值包起來;
然后在使用 reactive 將該包裹對象變成響應(yīng)式的即可
__v_isRef 屬性是用來判斷是否為 ref 包裹對象的判據(jù)
function ref(val) {
// 包裹對象
const wrapper = {
value: val,
};
// 是否為ref的判據(jù)
Object.defineProperty(wrapper, "__v_isRef", {
value: true,
});
// 返回響應(yīng)式數(shù)據(jù)
return reactive(wrapper);
}
響應(yīng)丟失
響應(yīng)丟失問題:使用 reactive 創(chuàng)建響應(yīng)式對象后,使用多參的形式 return,則實際上返回的是普通對象而非響應(yīng)式對象!
export default {
setup() {
const obj = reactive({ a: 1, b: 2 });
return {
...obj,
};
},
};
響應(yīng)關(guān)系建立
obj 為原響應(yīng)對象
newobj 內(nèi)擁有與 obj 同名的所有屬性值,且均一一編寫訪問器屬性 value
value 執(zhí)行后返回原響應(yīng)對象中的值
這樣一來,修改 obj 屬性后,便會自動觸發(fā)副作用函數(shù)執(zhí)行!
const obj = reactive({ a: 1, b: 2 });
const newobj = {
a: {
get value() {
return obj.a;
},
},
b: {
get value() {
return obj.b;
},
},
};
console.log(newobj.a.value);
toRef 函數(shù)的實現(xiàn)
使用包裹 wrapper,內(nèi)部加上 getter、setter 方法實現(xiàn)響應(yīng)式
function toRef(obj, key) {
const wrapper = {
get value() {
return obj[key];
},
set value(val) {
obj[key] = val;
},
};
Object.defineProperty(wrapper, "__v_isRef", {
value: true,
});
return wrapper;
}
自動脫 ref
使用 proxy 代理
判斷如果存在屬性 __v_isRef ,表示其為 ref,則返回該 ref 的值;
如果只是普通對象,那原樣返回即可
function proxyRefs(target) {
return new Proxy(target, {
get(target, key, receiver) {
const value = Reflect.get(target, key, receiver);
return value.__v_isRef ? value.value : value;
},
});
}
reactive 就是一個自動脫 ref 的例子,使用他的時候無需額外調(diào)用 value 即可獲取值
到此這篇關(guān)于Vue六大基本類型中的原始值響應(yīng)式的文章就介紹到這了,更多相關(guān)Vue原始值響應(yīng)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中swiper?vue-awesome-swiper的使用方法及各種坑解決
這篇文章主要介紹了vue中swiper?vue-awesome-swiper的使用方法及各種坑解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
Vue中控制v-for循環(huán)次數(shù)的實現(xiàn)方法
今天小編就為大家分享一篇Vue中控制v-for循環(huán)次數(shù)的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue引入路徑正確但一直報錯問題:Already included file name&n
這篇文章主要介紹了Vue引入路徑正確但一直報錯:Already included file name ‘××ב differs from file name ‘××ב only in casing.具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Vue如何將當前窗口截圖并將數(shù)據(jù)base64轉(zhuǎn)為png格式傳給服務(wù)器
這篇文章主要介紹了Vue如何將當前窗口截圖并將數(shù)據(jù)base64轉(zhuǎn)為png格式傳給服務(wù)器,通過實例代碼介紹了將當前窗口截圖,并將數(shù)據(jù)存儲下來,需要的朋友可以參考下2023-10-10
element-ui table span-method(行合并)的實現(xiàn)代碼
element-ui官網(wǎng)中關(guān)于行合并的例子是根據(jù)行號進行合并的,這顯然不符合我們?nèi)粘i_發(fā)需求,因為通常我們table中的數(shù)據(jù)都是動態(tài)生成的,非常具有實用價值,需要的朋友可以參考下2018-12-12

