Vue中v-for循环变量undefined报错:已进入循环却变量未定义?
v-for语法顺序错误
检查v-for的变量顺序是否写反:如果写成v-for="(m, measurement) in printData.measurements",第一个变量是索引,第二个才是数组元素,此时measurement会被赋值为索引值(0、1),而非数组对象,取title自然报错。正确写法应为v-for="(measurement, m) in printData.measurements"。另外也要确认有没有漏写括号,比如v-for="measurement, m in ..."这种语法错误会导致变量绑定异常。printData初始化不完整
即便Vue inspector显示数据正常,组件初始化阶段printData或其measurements属性可能未正确初始化。检查props的默认值设置:props: { printData: { type: Object, default: () => ({ measurements: [] }) // 必须初始化measurements为空数组,避免初始时该属性为undefined } }如果父组件是异步获取数据后传递
printData,组件渲染初期printData.measurements可能不存在,此时v-for遍历的是undefined,后续数据更新后仍可能残留报错。可以在模板中添加兜底判断:v-for="(measurement, m) in printData?.measurements || []"作用域内变量重名冲突
检查模板中是否有其他地方重定义了measurement变量。比如在当前v-for的同一作用域内,子元素中又出现了同名的v-for变量,会导致外层的measurement被覆盖,最终出现undefined的情况。响应式更新异常
虽然Vue inspector显示数据正常,但如果父组件更新printData.measurements时未遵循Vue响应式规则(比如直接修改数组索引、用非响应式方法修改数组),可能导致组件未正确感知元素变化,循环变量无法绑定到实际对象。可以确认父组件是否通过printData.measurements = [...newMeasurements]这种重新赋值数组的方式更新,而非直接修改原数组的内部结构。特定版本的Vue bug
你使用的Vue 3.2.26存在部分已知的v-for绑定异常场景(比如嵌套v-for配合v-if使用时),可以尝试升级到3.2.x系列的最新稳定版(如3.2.47),验证是否为版本bug导致的问题。
内容的提问来源于stack exchange,提问作者Markus

