vue3如何使用ref獲取元素
vue3使用ref獲取元素
在vue2.x中,可以通過(guò)給元素添加ref='xxx'屬性,然后在代碼中通過(guò)this.$refs.xxx獲取到對(duì)應(yīng)的元素
然而在vue3中時(shí)沒(méi)有$refs這個(gè)東西的,因此vue3中通過(guò)ref屬性獲取元素就不能按照vue2的方式來(lái)獲取
vue3需要借助生命周期方法,原因很簡(jiǎn)單,在setup執(zhí)行時(shí),template中的元素還沒(méi)掛載到頁(yè)面上,所以必須在mounted之后才能獲取到元素。
<template>
<div ref='box'>I am DIV</div>
</template>
<script>
import {ref,onMounted}
export default{
setup(){
let box = ref(null);
onMounted(()=>{
console.log(box.value)
});
return {box}
}
}
</script>vue3中ref的理解
1.什么是ref?
ref和reactive一樣,也是用來(lái)實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的方法
由于reactive必須傳遞一個(gè)對(duì)象,所以在實(shí)際開(kāi)發(fā)中如果只是想讓某個(gè)變量實(shí)現(xiàn)響應(yīng)式的時(shí)候回非常麻煩
所以Vue3提供了ref方法實(shí)現(xiàn)簡(jiǎn)單值得監(jiān)聽(tīng)
2.ref本質(zhì)
ref底層其實(shí)還是reactive,所以當(dāng)運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)根據(jù)傳入的ref轉(zhuǎn)換成reactive.
3.ref注意點(diǎn)
在vue中使用ref的值不用通過(guò)value獲取
在js中使用ref的值必須通過(guò)value獲取

4.ref獲取元素
在vue2中我們可以通過(guò)給元素添加ref=‘xxx’,然后在代碼中通過(guò)refs.xxx的方式來(lái)獲取元素,在vue3中也可以通過(guò)ref來(lái)獲取元素.
但不是像以下這種熟悉的方式,因?yàn)樵趘ue3中沒(méi)有$和refs這些東西.
錯(cuò)誤示范

正確寫(xiě)法
<template> ? <div> ? ? <div ref="box">我是div</div> ? </div> </template>
<script>
import { ref,onMounted } from "vue";
export default {
? setup() {
? ? let box = ref(null); //本質(zhì)是reactive({value:null})
? ? // 需要在生命周期獲取
? ? onMounted(()=>{
? ? ? // 當(dāng)界面掛載出來(lái)后就會(huì)自動(dòng)執(zhí)行
? ? ? console.log(box.value);
? ? })
? ? //接受的是null,原因是setup執(zhí)行時(shí)機(jī)比mounted早,dom還沒(méi)形成
? ? console.log(box.value);
? ? return { box };
? },
};
</script>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js實(shí)現(xiàn)價(jià)格計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)價(jià)格計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法
這篇文章主要介紹了Vue 自適應(yīng)高度表格的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
VUEX 數(shù)據(jù)持久化,刷新后重新獲取的例子
今天小編就為大家分享一篇VUEX 數(shù)據(jù)持久化,刷新后重新獲取的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
vue項(xiàng)目中swiper輪播active圖片實(shí)現(xiàn)居中并放大
這篇文章主要介紹了vue項(xiàng)目中swiper輪播active圖片實(shí)現(xiàn)居中并放大方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
vue中使用$emit傳遞多個(gè)參數(shù)的2種方法
這篇文章主要給大家介紹了關(guān)于vue中如何使用$emit傳遞多個(gè)參數(shù)的2種方法,在Vue中可以使用$emit方法向父組件傳遞數(shù)據(jù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
Vue3+vite路由配置優(yōu)化(自動(dòng)化導(dǎo)入)
這篇文章主要介紹了Vue3+vite路由配置優(yōu)化(自動(dòng)化導(dǎo)入),需要的朋友可以參考下2023-09-09
highCharts提示框中顯示當(dāng)前時(shí)間的方法
今天小編就為大家分享一篇關(guān)于highCharts提示框中顯示當(dāng)前時(shí)間的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
Vue 動(dòng)態(tài)組件與 v-once 指令的實(shí)現(xiàn)
這篇文章主要介紹了Vue 動(dòng)態(tài)組件與 v-once 指令的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02

