Vue.js模板语法中列表循环v-for与条件渲染v-if联合规范

阿杰同学_5127

阿杰同学_5127

2026-04-30

463人浏览

原创

v-for 和 v-if 不应同时作用于同一元素,因 v-for 优先级更高,导致每次循环都执行 v-if,引发性能下降、响应式陷阱和可读性差;推荐用计算属性预过滤数据,或在 v-for 内部使用 v-if 分支。

vue.js模板语法中列表循环v-for与条件渲染v-if联合规范

在 Vue.js 模板中,v-for 和 v-if 不应同时作用于同一个元素,这是 Vue 官方明确推荐的规范。因为 v-for 的优先级高于 v-if,当两者共存时,v-if 会在每次循环中被重复执行,不仅影响性能,还容易引发逻辑混乱和渲染异常。

为什么不能直接在同一标签上写 v-for 和 v-if

Vue 的编译机制会把 v-for 视为更高优先级的指令,先展开列表、再对每个子项执行 v-if 判断。这意味着:即使你只想渲染少数符合条件的项,Vue 仍会为整个原始数组创建大量中间 vnode(即使最终被 v-if 过滤掉),造成不必要的内存开销和响应式追踪负担。

  • 性能下降:遍历 + 判断次数 = 原始数组长度 × 渲染开销
  • 响应式陷阱:若过滤条件依赖响应式数据,每次更新都可能触发全量重渲染
  • 可读性差:逻辑耦合,难以维护和调试

推荐做法:用计算属性预过滤数据

将条件判断前置到 JavaScript 层,用 计算属性(computed) 返回已过滤的数组,再在模板中仅使用 v-for 渲染。这样既清晰又高效。

示例:

// Vue 3 Composition API
const filteredList = computed(() => {
  return list.value.filter(item => item.status === 'active')
})

模板中:

Wjs Localizing Video
Wjs Localizing Video

用于端到端视频本地化流程的轻量编排器,路由至四个专注子技能——/wjs-transcribing-audio、/wjs-translating-subtitles...

下载

  • {{ item.name }}
  • 特殊情况:需要在循环内做独立条件判断

    如果某些条件只针对单个列表项(比如根据 item 状态显示不同内容),应在 v-for 内部使用 v-if、v-else-if 或 v-show,而非放在同一标签上控制是否渲染该节点。

    • ✅ 正确:在 <li> 内部嵌套条件分支
    • ❌ 错误:<li v-for="..." v-if="...">

    例如:

    
    
  • 【管理员】{{ user.name }} {{ user.name }}
  • 替代方案:用 template 包裹实现“条件化循环”

    若必须在模板层动态决定是否执行整个循环(如:空数组时不渲染任何 <li>),可用 <template></template> 标签包裹 v-for,并在外层加 v-if 控制是否进入循环逻辑。

    <template v-if="shouldRenderList"><li v-for="item in list" :key="item.id">{{ item.text }}</li>
    </template>

    注意:template 是虚拟容器,不会被渲染为真实 DOM 节点,适合做逻辑分组。

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    vue js vue.js v-if

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    python是前端还是后端
    python是前端还是后端

    Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.11

    2363

    5

    前端如何实现即时通讯
    前端如何实现即时通讯

    实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

    2023.10.09

    5123

    6

    前端和后端的区别
    前端和后端的区别

    前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

    2024.03.19

    6190

    13

    php和前端的关联介绍
    php和前端的关联介绍

    php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

    2024.03.22

    5738

    10

    前端外包工作内容有哪些
    前端外包工作内容有哪些

    前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

    2024.05.22

    803

    5

    vue2.0和3.0区别
    vue2.0和3.0区别

    vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.17

    1654

    5

    vue3的生命周期有哪些
    vue3的生命周期有哪些

    vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    11962

    5

    Vue3组合式API与组件开发实战
    Vue3组合式API与组件开发实战

    本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

    2026.02.10

    316

    23

    vue.js为什么报错
    vue.js为什么报错

    vue.js报错的原因:1、语法错误;2、组件使用不当;3、数据绑定问题;4、生命周期钩子使用不当;5、插件或依赖问题;6、路由配置错误;7、异步操作处理不当等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.03.11

    2527

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    uni-app快速上手
    uni-app快速上手

    共0课时 | 0人学习

    Vue 教程
    Vue 教程

    共42课时 | 17万人学习

    Vue3.x 工具篇--十天技能课堂
    Vue3.x 工具篇--十天技能课堂

    共26课时 | 2.5万人学习