亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue3中的ref()詳解

瀏覽:142日期:2022-06-10 08:26:01
目錄
  • ref()
  • 1. ref在模板中自動(dòng)解包
  • 2. ref 在響應(yīng)式對(duì)象中的解包
  • 3. 數(shù)組和集合類(lèi)型的 ref 解包
  • 總結(jié)

ref()

接受一個(gè)值,返回一個(gè)響應(yīng)式的,可以修改的ref對(duì)象,這個(gè)對(duì)象只有一個(gè).vaule屬性。

ref對(duì)象可以通過(guò).value屬性進(jìn)行修改,修改后的值也是響應(yīng)式的,并且修改后會(huì)觸發(fā)相關(guān)的副作用。

如果將一個(gè)對(duì)象賦值給ref,則這個(gè)對(duì)象會(huì)通過(guò)reactive()轉(zhuǎn)為具有深層次的響應(yīng)式對(duì)象。

對(duì)于屬性值是ref對(duì)象的對(duì)象,解構(gòu)后也具有響應(yīng)式。

1. ref在模板中自動(dòng)解包

當(dāng)ref作為頂層屬性在模板中使用時(shí),自動(dòng)解包,不用.value即可獲取值。

const count = ref(1);
count.value = 2;

直接使用

<!-- count值為2 -->
<div>{{count}}</div>
<!-- 正確 -->
<div>{{count + 1}}</div>

若不是頂層屬性, 假如值需要邏輯操作,則會(huì)出現(xiàn)問(wèn)題。

const obj = {
    age: ref(1)
}
<!-- 可以正常顯示-->
<div>{{obj.age}}</div>
<!-- 會(huì)報(bào)錯(cuò)  渲染的結(jié)果會(huì)是一個(gè) [object Object],因?yàn)?obj.age 是一個(gè) ref 對(duì)象。需要obj.age.value 才能正常顯示-->
<div>{{obj.age + 1}}</div>

解構(gòu)后也具有響應(yīng)式

const {age} = obj;

2. ref 在響應(yīng)式對(duì)象中的解包

一個(gè)ref對(duì)象嵌套在一個(gè)響應(yīng)式對(duì)象中,屬性訪(fǎng)問(wèn)時(shí)會(huì)自動(dòng)解包

const a = ref(1)
const state = reactive({
    age: a
})
console.log(state.age); // 1 直接解包,不用state.age.value

如果將一個(gè)新的 ref 賦值給另一個(gè)對(duì)象具有 ref屬性的 ,那么它會(huì)替換掉舊的 ref。

const b = ref(3);
// 假如將b直接賦值給state.age,因?yàn)閎是一個(gè)ref對(duì)象,則會(huì)替代之前的ref對(duì)象,則現(xiàn)在state.age不管如何變化都變量a沒(méi)有了關(guān)系
state.age = b;
console.log(stata.age); // 3
console.log(a); // 1
// 假如將b.value賦值給state.age,其實(shí)b.value就相等于一個(gè)值,并不是ref對(duì)象,則不會(huì)替代之前的ref對(duì)象,則state.age變化,之前的變量a也會(huì)隨之變化
state.age = b.value;
console.log(state.age); // 3
console.log(a); // 3

只有當(dāng)嵌套在一個(gè)深層響應(yīng)式對(duì)象內(nèi)時(shí),才會(huì)發(fā)生 ref 解包。當(dāng)其作為淺層響應(yīng)式對(duì)象的屬性被訪(fǎng)問(wèn)時(shí)不會(huì)解包。

3. 數(shù)組和集合類(lèi)型的 ref 解包

跟響應(yīng)式對(duì)象不同,當(dāng) ref 作為響應(yīng)式數(shù)組或像 Map 這種原生集合類(lèi)型的元素被訪(fǎng)問(wèn)時(shí),不會(huì)進(jìn)行解包。

const books = reactive([ref("Vue 3 Guide")])
// 這里需要 .value
console.log(books[0].value)
const map = reactive(new Map([["count", ref(0)]]))
// 這里需要 .value
console.log(map.get("count").value)

總結(jié)

返回一個(gè)具有響應(yīng)式的ref對(duì)象,并只有一個(gè)屬性.value可通過(guò).value 獲取或修改值。在模板中自動(dòng)解包,對(duì)于對(duì)象在模板中使用若需要邏輯操作需.value。解構(gòu)出來(lái)的也具有響應(yīng)式對(duì)于響應(yīng)式對(duì)象可以解包當(dāng)一個(gè)ref對(duì)象賦值給另一個(gè)ref對(duì)象,則會(huì)替換舊的ref對(duì)象對(duì)于響應(yīng)式數(shù)組則不會(huì)解包

到此這篇關(guān)于vue3中的ref()的文章就介紹到這了,更多相關(guān)vue3中的ref()內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
主站蜘蛛池模板: 免费国产视频在线观看 | 加勒比一本大道在线 | 久久综合九色综合欧洲 | 久久久免费视频播放 | 亚洲一区在线免费 | 欧美精品一区二区三区四区 | 嫩草视频在线看 | 亚洲激情 | 国产成人欧美一区二区三区的 | 小明看片| 国产午夜精品福利久久 | 日韩一区二区三区视频在线观看 | 国产成人久久777777 | 国产亚洲欧美在线 | 97超级碰久久久久香蕉人人 | 久久久久国产精品美女毛片 | 午夜久久久久久久 | 大片免免费观看视频播放网站 | 亚洲热热久久九九精品 | 一级毛片在线 | 亚洲第一区视频在线观看 | 色综合久久亚洲国产日韩 | 男女很黄很色床视频网站免 | 一级毛片一级黄片 | 欧美做爱毛片 | 成 人色 网 站999 | 欧美三级一区 | 1024在线视频精品免费 | 国产精品福利视频萌白酱g 国产精品福利影院 | 成人精品一区二区三区校园激情 | 欧美videos另类极品 | 日本精品久久久久中文字幕 1 | 99热久久国产综合精品久久国产 | 欧美日本一道本 | 国产日产高清欧美一区二区三区 | 久久视频精品53在线观看 | 九九在线免费视频 | 欧美日韩国产综合视频一区二区三区 | 国产精品久久久99 | 色综合色综合色综合色综合 | 国产99久9在线视频 国产99久久精品 |