news 2026/4/15 21:28:08

Vue3中v-for与v-if为何不能直接共存于同一元素?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue3中v-for与v-if为何不能直接共存于同一元素?

url: /posts/138b13c5341f6a1fa9015400433a3611/
title: Vue3中v-for与v-if为何不能直接共存于同一元素?
date: 2025-12-31T11:08:38+08:00
lastmod: 2025-12-31T11:08:38+08:00
author: cmdragon
cover: /images/generated_image_aa46ce2d-2900-409d-b5ff-b0b5c247ebd9.png

summary:
Vue中v-for可遍历数组和对象。数组遍历支持基础用法、索引、对象解构;对象遍历可获取value、key、index,三参数顺序为value、key、index。v-for与v-if共存需放,用key维护列表状态避免“就地更新”。数组mutation方法(push等)可直接检测更新,非mutation方法(filter等)需替换原数组。

categories:

  • vue

tags:

  • 基础入门
    • v-for
  • Vue3
  • 数组遍历
  • 列表渲染
  • key
  • v-if
  • 数组变化检测

扫描二维码)关注或者微信搜一搜:编程智域 前端至全栈交流与成长

发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/

v-for 遍历数组:最基础的列表渲染

列表渲染的核心是遍历数据生成DOMv-for最常见的用法是遍历数组。它的语法是item in items(或item of items,更贴近JS迭代器语法),其中items是源数据数组,item是当前元素的别名。

基础用法:遍历数组元素

比如我们有一个待办项数组,用v-for渲染成列表:

<!-- Composition API --> <script setup> import { ref } from 'vue' const todos = ref([ { id: 1, text: '学习Vue3' }, { id: 2, text: '写博客' }, { id: 3, text: '陪猫玩' } ]) </script> <template> <ul> <li v-for="todo in todos">{ { todo.text }}</li> </ul> </template> <!-- Options API --> <script> export default { data() { return { todos: [ { id: 1, text: '学习Vue3' }, { id: 2, text: '写博客' }, { id: 3, text: '陪猫玩' } ] } } } </script>

渲染结果会是三个<li>标签,分别显示待办内容。

带索引的遍历:跟踪元素位置

如果需要知道当前元素的索引,可以加上第二个参数index

<template> <ul> <li v-for="(todo, index) in todos"> { { index + 1 }}. { { todo.text }} <!-- 索引从0开始,+1变成序号 --> </li> </ul> </template>

此时index会依次取012,配合+1就能生成“1. 学习Vue3”这样的序号。

解构赋值:简化代码

如果数组元素是对象,还可以用解构赋值直接取出需要的属性,让模板更简洁:

<template> <!-- 直接解构出text属性 --> <li v-for="{ text } in todos">{ { text }}</li> <!-- 带索引的解构 --> <li v-for="({ text }, index) in todos">{ { index + 1 }}. { { text }}</li> </template>

v-for 遍历对象:处理键值对集合

除了数组,v-for还能遍历对象的属性。语法是value in object,但通常我们会加上key(属性名)和index(索引):

遍历对象的三个参数

v-for遍历对象时,参数顺序是:

  1. value:对象属性的值
  2. key:对象属性的名称
  3. index:属性的索引(从0开始)

比如遍历一个文章信息对象:

<script setup> import { reactive } from 'vue' const article = reactive({ title: 'Vue3 v-for 教程', author: '张三', date: '2024-05-20' }) </script> <template> <ul> <li v-for="(value, key, index) in article"> { { index + 1 }}. { { key }}: { { value }} </li> </ul> </template>

渲染结果:

  1. title: Vue3 v-for 教程
  2. author: 张三
  3. date: 2024-05-20

v-for 遍历范围:重复渲染固定次数

如果需要重复渲染某个元素N次,可以用v-for遍历一个整数范围。比如生成1到10的数字:

<template> <span v-for="n in 10">{ { n }} </span> <!-- 输出1 2 3 ... 10 --> </template>

注意:范围的起始值是1,不是0。

v-for 与 template 配合:渲染多个元素块

有时候我们需要用v-for渲染一组元素(比如“内容+分隔线”),但不想让这些元素被额外的DOM节点包裹。这时可以用<template>标签包裹v-for,它不会生成实际的DOM元素:

<template> <ul> <template v-for="todo in todos" :key="todo.id"> <li>{ { todo.text }}</li> <li role="presentation"></li> <!-- 分隔线 --> </template> </ul> </template>

这样渲染后,每个待办项后面都会跟一个分隔线,且不会多出多余的父节点。

v-for 与 v-if 共存:避免优先级陷阱

重点注意:当v-forv-if写在同一个元素上时,v-if的优先级更高!这意味着v-if的条件无法访问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 16:30:25

YOLOv8训练中断怎么办?断点续训checkpoint机制详解

YOLOv8训练中断怎么办&#xff1f;断点续训checkpoint机制详解 在深度学习项目中&#xff0c;最令人沮丧的场景之一莫过于&#xff1a;模型已经跑了几十个epoch&#xff0c;验证损失稳步下降&#xff0c;mAP持续上升——结果服务器突然重启、电源跳闸&#xff0c;或者云实例被抢…

作者头像 李华
网站建设 2026/4/3 2:28:42

Java程序员必看!大模型开发转型全攻略,收藏这份高薪跳板_程序员转行AI大模型教程(非常详细)

本文详细介绍了Java程序员转型大模型开发的路径&#xff0c;包括学习基础知识、掌握工具框架、提升编程能力和数学知识储备等步骤。文章分析了Java程序员在AI领域的优势&#xff0c;列举了AI工程师、数据模型架构师等高薪岗位&#xff0c;并提供了系统化的学习路线和资源。随着…

作者头像 李华
网站建设 2026/4/15 6:58:29

算法题 公平的糖果交换

公平的糖果交换 问题描述 爱丽丝和鲍勃有不同大小的糖果&#xff1a;aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果的大小&#xff0c;bobSizes[j] 是鲍勃拥有的第 j 盒糖果的大小。 因为他们非常友好&#xff0c;所以希望交换一盒糖果&#xff0c;使得交换后两人拥有的糖果总量相等…

作者头像 李华
网站建设 2026/4/14 7:40:08

YOLOv8 SSH远程连接配置步骤(含IP与端口设置)

YOLOv8 SSH远程连接配置实践指南 在现代深度学习开发中&#xff0c;本地机器往往难以满足YOLOv8这类高性能目标检测模型的训练需求。越来越多的团队选择将计算任务部署到云端服务器或远程GPU主机上&#xff0c;而如何安全、高效地访问这些环境&#xff0c;就成了关键问题。 设…

作者头像 李华
网站建设 2026/4/13 0:01:11

C#跨平台AOP拦截方案深度解析(仅限高级开发者阅读)

第一章&#xff1a;C#跨平台AOP拦截技术概述面向切面编程&#xff08;AOP&#xff09;是一种旨在分离横切关注点&#xff08;如日志记录、异常处理、性能监控等&#xff09;的编程范式。在C#开发中&#xff0c;借助AOP可以将这些通用逻辑与核心业务代码解耦&#xff0c;从而提升…

作者头像 李华
网站建设 2026/4/3 13:56:22

芜湖同盈环卫S1800四轮扫地车:赋能城市精细化保洁新升级

随着城市化进程的持续加快&#xff0c;城市环境卫生治理水平已成为衡量城市品质与民生幸福指数的重要标尺。在芜湖市推进市容环境精细化治理的关键阶段&#xff0c;芜湖同盈环境卫生管理有限公司主动践行企业责任&#xff0c;积极引入先进环卫装备&#xff0c;其中明诺S1800四轮…

作者头像 李华