v-show 与 v-if

1. v-show 与 v-if 的共同点

二者都是 Vue 中用于控制 DOM 元素显示 / 隐藏的指令,都可以根据表达式的布尔值决定元素是否展示。

2. v-show 与 v-if 的区别

维度 v-show v-if
渲染方式 始终渲染 DOM,通过display: none控制隐藏 条件为false时,不渲染 DOM 到页面
切换开销 切换时仅修改 CSS,开销小 切换时会销毁 / 重建 DOM,开销大
初始渲染开销 初始渲染需渲染 DOM,开销略大 条件为false时不渲染,初始开销小
支持场景 不能用于<template>标签 可以用于<template>标签(分组渲染)

3. v-show 与 v-if 的原理分析

  • v-show:编译后会给元素添加内联样式display: [条件? 'block' : 'none'],DOM 元素始终存在于文档流中。
  • v-if:编译时会根据条件生成条件渲染的代码块,条件为false时,对应的 DOM 节点不会被创建(或会被从 DOM 树中移除)。

4. v-show 与 v-if 的使用场景

  • v-show:适用于切换频繁的元素(如标签页内容、弹窗开关),利用低切换开销提升性能。
  • v-if:适用于切换频率低、或初始条件为 false 且不需要渲染 DOM的场景(如权限控制的内容、页面初始化时不需要显示的模块),避免不必要的 DOM 渲染。