Vue六大基本類型中的原始值響應(yīng)式
所謂原始值即針對六大基本類型的值的響應(yīng)式
ref
由于 proxy 無法阻止原始值的修改,故此方法在這里不管用
我們可以創(chuàng)建一個(gè)包裹對象把原始值包起來;
然后在使用 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,則實(shí)際上返回的是普通對象而非響應(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ù)的實(shí)現(xiàn)
使用包裹 wrapper,內(nèi)部加上 getter、setter 方法實(shí)現(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 就是一個(gè)自動脫 ref 的例子,使用他的時(shí)候無需額外調(diào)用 value 即可獲取值
到此這篇關(guān)于Vue六大基本類型中的原始值響應(yīng)式的文章就介紹到這了,更多相關(guān)Vue原始值響應(yīng)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue滑塊驗(yàn)證碼組件anji-captcha的使用案例詳解
滑塊驗(yàn)證是一種常見的人機(jī)識別方法,這篇文章主要介紹了Vue滑塊驗(yàn)證碼組件anji-captcha的使用,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
ant-design-vue 時(shí)間選擇器賦值默認(rèn)時(shí)間的操作
這篇文章主要介紹了ant-design-vue 時(shí)間選擇器賦值默認(rèn)時(shí)間的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨過來看看吧2020-10-10
vue.js開發(fā)實(shí)現(xiàn)全局調(diào)用的MessageBox組件實(shí)例代碼
最近學(xué)習(xí)了Vue.js,感覺組件這個(gè)地方知識點(diǎn)挺多的,而且很重要,所以決定記錄下,下面這篇文章主要給大家介紹了關(guān)于利用vue.js開發(fā)實(shí)現(xiàn)全局調(diào)用的MessageBox組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-11-11
vue?this.$refs.xxx獲取dom注意事項(xiàng)?v-if?v-for渲染的dom不能直接使用
這篇文章主要介紹了vue?this.$refs.xxx獲取dom注意事項(xiàng)?v-if?v-for渲染的dom不能直接使用問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

