Vue 3 迁移策略笔记—— 第1节:v-for 中的 Ref 数组

本文介绍Vue3中v-for语句中Ref处理的变化,从数组生成变为手动管理,提高了灵活性与效率,并展示了实现示例。

前言

本笔记主要基于官方文档《迁移策略—— v-for 中的 Ref 数组》汇总而来。建议您以官方文档为主,本文为辅。这样您可以“以自己为主”审视的阅读,从而不被我的观点带偏。

Vue 2.x v-for 中的 Ref 数组的问题

在 Vue 2 中,在 v-for 语句中使用ref属性时,会生成refs数组插入$refs属性中。

如下:

<div v-for="item in 5" :key="item" :ref="item">
  {{ item }}
</div>

$refs的结果如下:

在这里插入图片描述

由于当存在嵌套的v-for时,这种处理方式会变得复杂且低效。

<div v-for="item in 5" :key="item" :ref="item">
  <div v-for="y in 5" :key="y" :ref="y">
    {{ item }} - {{ y }}
  </div>
</div>

$refs的结果如下:
在这里插入图片描述

Vue 3.x 的优化

因此,在 Vue 3,v-for 语句中使用ref属性 将不再会自动在$refs中创建数组。而是,将 ref 绑定到一个 function 中,在 function 中可以灵活处理ref

如下:

<template>
	<div>
		<h1>v-for Array Refs</h1>
		<div>
			<div v-for="item in 5" :key="item" :ref="setItemRef">
				 {{ item }}
			</div>
			<button @click="print">打印 $refs</button>
		</div>
	</div>
</template>
<script>
export default {
	name: 'VforArrayRefs',
	data() {
		return {
			itemRefs: []
		};
	},
	methods: {
		setItemRef(el) {
			this.itemRefs.push(el);
		},
		print() {
			console.log('打印 $refs:');
      console.log(this.$refs);
			console.log('打印 itemRefs');
      console.log(this.itemRefs);
		}
	}
};
</script>

结果如下:
在这里插入图片描述

注意:

  • itemRefs不强制要求是数组,也可以是对象;
  • 如有必要,itemRef 也可以是响应式的且可以被监听。(这点很好理解,因为itemRefsdata属性)

本系列目录

<think> 根据用户问题,用户想要在Vue 3中使用v-for遍历数组时获取每一项对应的键名。 注意:在数组中,通常我们所说的键名(key)实际上是指数组的索引(index),因为数组的每一项都有一个从0开始的整数索引。而在对象中,键名(key)指的是对象的属性名。 用户引用的内容中,引用[2]提到: - 遍历数组时,可以获取索引值:`v-for="(item, index) in names"` 这里,`index`就是数组每一项的索引(键名)。 另外,引用[3]展示了遍历对象的语法:`v-for="(value, key, index) in options"`,其中`key`就是对象的属性名。 但是用户的问题是遍历数组,所以应该使用数组的遍历方式。在数组中,每一项只有一个索引(index),没有像对象那样的键(key)的概念(除非数组是稀疏数组或者有自定义属性,但通常我们不这么做)。 因此,在遍历数组时,我们通常只获取两个值:元素本身和索引(index)。所以,用户想要获取的“键名”实际上就是索引。 具体方法如下: 使用`v-for`时,可以接收两个参数:第一个是数组的元素(item),第二个是索引(index)。 示例代码(Vue 3): ```html <div id="app"> <ul> <li v-for="(item, index) in items" :key="index"> 索引: {{ index }}, 值: {{ item }} </li> </ul> </div> ``` 注意:在Vue中,我们通常为每个遍历的元素绑定一个唯一的`:key`,这里使用`index`作为key是一种常见的做法,但如果数组的顺序会改变,则不建议用索引作为key,因为可能会导致性能问题和渲染错误。更好的做法是使用每个元素的唯一标识(如id)。 总结:在Vue 3中,使用`v-for`遍历数组获取每一项对应的键名(索引)的方法是使用`(item, index) in array`的语法。 根据指令,最后需要生成相关问题。 </think> 在 Vue 3 中使用 `v-for` 遍历数组时获取每一项对应的键名(索引值)的方法是使用 `(item, index) in array` 语法结构。其中: - `item` 表示数组当前项的值 - `index` 表示当前项的索引(键名),从 0 开始递增 ### 具体实现示例 ```html <template> <div> <!-- 遍历数组并获取索引 --> <ul> <li v-for="(item, index) in items" :key="index"> 索引:{{ index }} - 值:{{ item }} </li> </ul> </div> </template> <script setup> import { ref } from &#39;vue&#39;; const items = ref([&#39;苹果&#39;, &#39;香蕉&#39;, &#39;橙子&#39;, &#39;葡萄&#39;]); </script> ``` ### 语法说明 1. **参数顺序固定**: `(item, index)` 参数顺序不能颠倒,第一个参数为数组元素值,第二个参数为索引 2. **key 绑定**: 必须使用 `:key` 绑定唯一标识(建议使用 `index` 或更稳定的 id) 3. **索引从 0 开始**: 输出的索引值会从 0 开始自动递增,例如: ```html <!-- 输出结果示例 --> <li>索引:0 - 值:苹果</li> <li>索引:1 - 值:香蕉</li> ``` ### 对比对象遍历 虽然引用[3]提到对象遍历时可使用 `(value, key, index)` 语法获取键名(属性名),但**数组遍历时第二个参数始终是索引而非键名**。这与对象遍历的键名获取方式有本质区别[^2][^3]。 ### 注意事项 -数组顺序可能变化时,不建议使用索引作为 `:key` 值(可用唯一 id 替代) - 支持嵌套解构:`v-for="({ id, name }, index) in users"` - 可单独获取索引:`v-for="(_, index) in items"`(使用 `_` 忽略元素值)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值