Vue2 中 v-if 与 v-show 深度对比及实战指南

文章目录

一、核心差异解析

对比维度 v-if v-show
控制原理 动态创建 / 销毁 DOM 元素 修改 display 样式(隐藏为 none)
模板支持 可用于<template>分组元素 不支持<template>标签
初始渲染 惰性加载(假时不渲染) 必渲染 DOM(仅隐藏)
切换成本 高(重建组件 / 解绑事件) 低(仅改样式)
内存占用 隐藏时释放内存 始终占用内存
v-else 配合 支持链式 v-else-if/v-else 仅 Vue1.x 支持,Vue2 不兼容

二、实战场景示例

2.1 基础用法对比

javascript 复制代码
    <!-- v-if 支持多元素分组 -->

    <template v-if="hasPermission">

         <button>编辑    </button>

         <button>删除    </button>

    </template>

    <div v-else>无操作权限    </div>

    <!-- v-show 单元素控制 -->

    <div v-show="isVisible">始终存在于DOM中    </div>

2.2 性能影响示例

javascript 复制代码
    <template>

         <!-- 首屏优化:v-if减少DOM节点 -->

         <AdvancedChart v-if="showChart" />    

         <!-- 错误:v-show导致首屏DOM超3000个 -->

         <!--     <AdvancedChart v-show="showChart" /> -->

    </template>

    <script>

// 查看DOM节点数(控制台调试)

console.log(    $    $("    *").length); // 监控v-show造成的节点冗余

    </script>

2.3 条件链用法

javascript 复制代码
    <!-- v-if 条件链(Vue2推荐) -->

    <div v-if="type === 'A'">类型A    </div>

    <div v-else-if="type === 'B'">类型B    </div>

    <div v-else>其他类型    </div>

    <!-- v-show 无原生条件链 -->

    <div v-show="type === 'A'">类型A    </div>

    <div v-show="type === 'B'">类型B    </div>

三、避坑与最佳实践

  1. 高频切换选 v-show:标签页、开关等交互场景,利用低切换成本提升流畅性。

  2. 首屏 / 低频场景选 v-if:弹窗、权限控件等,减少初始 DOM 节点和内存占用。

  3. 避免 v-if 与 v-for 混用:先通过 computed 过滤数据,再用 v-for 渲染。

javascript 复制代码
computed: {

     filteredList() {

       return this.list.filter(item => item.visible);

     }

}
相关推荐
遇乐的果园11 分钟前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_33 分钟前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸37 分钟前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地1 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
刘较瘦_2 小时前
AI 开发中的 Git Submodule 父子仓库模式:前后端分仓管理与协作实践
前端·github
yaoxin5211232 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
牧艺2 小时前
cos-design WeatherBackground:用 Canvas 做一个「会变天」的背景引擎
前端·canvas·视觉设计
groundhappy2 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
OpenTiny社区2 小时前
深度解析 LSP 如何为 AI 装上“眼睛”
前端·ai编程
布列瑟农的星空2 小时前
流程类SVG画布的通用开发范式
前端