# Array Refs no v-for
breaking
No Vue 2, usar o atributo ref
dentro do v-for
irá preencher a propriedade $refs
correspondente com um Array de refs
. Este comportamento se torna ambíguo e ineficiente quando existem v-for
aninhados.
No Vue 3, tal uso não mais criará automaticamente um Array em $refs
. Para recuperar várias referências de uma única ligação, vincule ref
à uma função que forneça mais flexibilidade (este é um novo recurso):
<div v-for="item in list" :ref="setItemRef"></div>
1
Com API de Opções:
export default {
data() {
return {
itemRefs: []
}
},
methods: {
setItemRef(el) {
if (el) {
this.itemRefs.push(el)
}
}
},
beforeUpdate() {
this.itemRefs = []
},
updated() {
console.log(this.itemRefs)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Com API de Composição:
import { onBeforeUpdate, onUpdated } from 'vue'
export default {
setup() {
let itemRefs = []
const setItemRef = el => {
if (el) {
itemRefs.push(el)
}
}
onBeforeUpdate(() => {
itemRefs = []
})
onUpdated(() => {
console.log(itemRefs)
})
return {
setItemRef
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Observe que:
itemRefs
não precisa ser um Array: também pode ser um objeto onde as referências são definidas por suas chaves de iteração.Isso também permite que
itemRefs
sejam reativos e observados, se necessário.
# Estratégia de Migração
Sinalizadores na compilação de migração:
V_FOR_REF
COMPILER_V_FOR_REF