vue3使用ref獲取dom結(jié)果為'null'的原因詳析
在vue2中,我們使用ref獲取dom元素時(shí)是這樣子的:
// 父組件 <template> <div> <button @click=handleClick>我裝載了一個(gè)子組件!</button> <son ref="dataList"></son> </div> </template> <script> import son from './data.vue' export default { components: { son }, methods:{ handleClick(){ console.log(this.$refs.dataList) //像這樣! } } } </script>
在vue3中,我們使用ref獲取dom元素時(shí)是這樣子的:
// 父組件 <template> <button @click=handleClick>我裝載了一個(gè)子組件!</button> <son ref="dataList"></son> </template> <script> import {ref} from 'vue' import son from './data.vue' export default { setup(){ const dataList=ref(null) const handleClick=()=>{ console.log(dataList.value) //像這樣! } return{ dataList //這里要拋出響應(yīng)式數(shù)據(jù)才可使用。 } } } </script>
下面來(lái)說(shuō)說(shuō)vue3中獲取dom為空的原因:
1.setup的return中應(yīng)該拋出ref封裝的字段,否則ref的值只是定義了并不能響應(yīng)式使用,事實(shí)上,所有ref或者reactive定義的值都應(yīng)在return中拋出。
2.直接在setup()中打印。這就是生命周期的問(wèn)題了,setup本質(zhì)上相當(dāng)于vue2中的created,在創(chuàng)建階段,dom元素還未完全創(chuàng)建完成,此時(shí)獲取dom自然為null了。上面的例子中我是在點(diǎn)擊按鈕中觸發(fā)的,此時(shí)早已經(jīng)過(guò)創(chuàng)建階段,如果你想更早,可以手動(dòng)定義onMented去打印,如下:
import {ref,onMented} from 'vue' export default { setup(){ const dataList=ref(null) onMented(()=>{ console.log(dataList.value) //像這樣! }) return{ dataList } } }
3.如果你在使用時(shí)出現(xiàn)ref.value取不到子組件里的值,或者報(bào)錯(cuò)ref.value對(duì)象為空的情況,那是因?yàn)樽咏M件要把能夠被負(fù)組件調(diào)用的方法暴露出來(lái),在子組件里加上defineExpose就可以啦。
defineExpose({ onOpen //這是你要調(diào)用的方法名 });
總結(jié)
到此這篇關(guān)于vue3使用ref獲取dom結(jié)果為'null'的原因詳析的文章就介紹到這了,更多相關(guān)vue3 ref獲取dom結(jié)果為null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3中進(jìn)行二維碼的生成與解碼實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Vue3中進(jìn)行二維碼的生成與解碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03ElementUI中<el-form>標(biāo)簽中ref、:model、:rules的作用淺析
Element官方文檔中寫(xiě)到,model是表單數(shù)據(jù)對(duì)象,rules是表單驗(yàn)證規(guī)則,下面這篇文章主要給大家介紹了關(guān)于ElementUI中<el-form>標(biāo)簽中ref、:model、:rules作用的相關(guān)資料,需要的朋友可以參考下2023-01-01vue cli構(gòu)建的項(xiàng)目中請(qǐng)求代理與項(xiàng)目打包問(wèn)題
這篇文章主要介紹了vue cli構(gòu)建的項(xiàng)目中請(qǐng)求代理與項(xiàng)目打包問(wèn)題,需要的朋友可以參考下2018-02-02解讀Vue3中keep-alive和動(dòng)態(tài)組件的實(shí)現(xiàn)邏輯
這篇文章主要介紹了Vue3中keep-alive和動(dòng)態(tài)組件的實(shí)現(xiàn)邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05基于VUE.JS的移動(dòng)端框架Mint UI的使用
本篇文章主要介紹了基于VUE.JS的移動(dòng)端框架Mint UI的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10