条件渲染 v-show与v-if

v-show和v-if的区别

1、渲染的机制不同

v-show是通过控制css的display元素也决定元素是否要显示,而v-if则是完全销毁与重建该元素及其子元素,当v-if条件为true时则渲染该元素并将其留在dom中,当条件为false时则将其元素及其子元素从dom中移除。

2、渲染的开销不同

v-if时惰性的,如果初始条件为false则什么也不做,也不会触发组件的生命周期钩子;只有当首次条件为true时才会渲染条件块。v-show则是不关初始条件是什么元素对会被渲染,会触发组件的生命周期钩子,所以有更高的渲染开销。

3、切换的开销不同

v-show是通过控制css的display元素也决定元素是否要显示条件块内的dom元素和组件实例会被保留,而v-if则是完全销毁与重建条件块内的dom元素和组件实例。

4、支持的功能也有所不同

v-if支持v-else、v-if-else,并且可以在template元素上使用,v-show只可以用v-show并且可以在template上使用。

5、使用的场景

v-if可以使用在那些不需要频繁改变状态的情境下,如用户的权限,平台区分等,需要在template上使用条件渲染,包装多个元素时,v-show适用与那些需要频繁切换显示状态的场景下,比如对话框,提示信息等。

v-if的使用

html 复制代码
<!-- 用户权限控制 -->
<admin v-if="user.isAdmin"></admin>

<!-- 多条件分支 -->
<div v-if="status === 'loading'">加载中...</div>
<div v-else-if="status === 'success'">加载成功</div>
<div v-else-if="status === 'error'">加载失败</div>
<div v-else>未知状态</div>

<!-- 包装多个元素 -->
<template v-if="showSection">
  <h2>标题</h2>
  <p>段落1</p>
  <p>段落2</p>
</template>

v-show的使用

html 复制代码
<!-- 频繁切换的对话框 -->
<div v-show="isDialogVisible" class="dialog">
  <!-- 对话框内容 -->
</div>

<!-- 标签页内容 -->
<div v-show="activeTab === 'home'" class="tab-content">首页内容</div>
<div v-show="activeTab === 'profile'" class="tab-content">个人资料</div>
<div v-show="activeTab === 'settings'" class="tab-content">设置</div>
相关推荐
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz20 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
从前慢丶20 小时前
前端交互规范(Web 端)
前端
CHU72903520 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing20 小时前
Page-agent MCP结构
前端·人工智能
王霸天20 小时前
💥别再抄网上的Scale缩放代码了!50行源码教你写一个永不翻车的大屏适配
前端·vue.js·数据可视化
小领航20 小时前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
@大迁世界20 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript
PieroPc20 小时前
一个功能强大的 Web 端标签设计和打印工具,支持服务器端直接打印到局域网打印机。Fastapi + html
前端·html·fastapi
悟空瞎说20 小时前
深入 Vue3 响应式:为什么有的要加.value,有的不用?从设计到源码彻底讲透
前端·vue.js