v-for實(shí)現(xiàn)綁定ref數(shù)組

ref 被用來給元素或子組件注冊(cè)引用信息。引用信息將會(huì)注冊(cè)在父組件的 $refs 對(duì)象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子組件上,引用就指向組件實(shí)例。
當(dāng) v-for 用于元素或組件的時(shí)候,引用信息將是包含 DOM 節(jié)點(diǎn)或組件實(shí)例的數(shù)組
例如:
vue2

<div  v-for="(item,index) in list" :key="item.id" :ref="item.name"></div>
// 使用 console.log(this.$refs)
this.$refs.itemName[0]

vue3
先附上vue3官網(wǎng)推薦寫法

<div v-for="(item,index) in list" :key="item.id">
    <div :ref="setItemRef"></div>
</div>

setup() {
    const state = reactive({
        list:[
            {
                id:"0001",
                name:"re1"
            },{
                id:"0001",
                name:"re1"
          }]
    })
    const itemRef = ref([])
    const setItemRef = (el) => {
      itemRef.value.push(el)
    }
    return {
         ...toRefs(state),
        setItemRef,
    }
}

實(shí)際使用過程中會(huì)發(fā)現(xiàn)setItemRef中出現(xiàn)重復(fù)的ref,導(dǎo)致無法正確撿出需要的dom。
主要原因是受vue的響應(yīng)式系統(tǒng)影響,當(dāng)綁定的這個(gè)元素發(fā)生變化的時(shí)候會(huì)觸發(fā)ref,在使用push添加元素時(shí), 會(huì)在更新的時(shí)候造成bug, 元素會(huì)重復(fù)。
之前嘗試過利用Set去重,雖然可以保證setItemRef只有一個(gè)需要的對(duì)象,但是使用過程中仍然會(huì)報(bào)找不到對(duì)應(yīng)dom。
后來在前輩這里找到了解決方案。直接貼代碼:

<div v-for="(item, index) in list" :key="item.id">
    <div :ref="el => setItemRef[index]=el"></div>
</div>

setup(){
    const state = reactive({
        list:[
            {
                id:"0001",
                name:"re1"
            },{
                id:"0001",
                name:"re1"
          }]
    })
    const setItemRef = ref([]) 
    return {
        ...toRefs(state),
        setItemRef,
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容