当前位置: 首页 > news >正文

HoRain云--Vue3条件渲染完全指南

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

一、v-if基础用法

二、v-else和 v-else-if

三、v-show替代方案

四、在 上使用 v-if

五、v-if与 v-for一起使用

六、性能与使用建议

七、实用技巧

关键要点


以下是Vue 3 条件渲染的完整指南,主要使用v-ifv-elsev-else-ifv-show指令来控制元素的显示与隐藏。

一、v-if基础用法

v-if指令用于条件性地渲染一块内容。只有当表达式返回真值时,元素才会被渲染到 DOM 中。

<template> <div> <!-- 单个条件 --> <p v-if="isVisible">这个段落会根据 isVisible 的值显示或隐藏</p> <!-- 条件判断 --> <button @click="toggle">切换显示</button> </div> </template> <script setup> import { ref } from 'vue'; const isVisible = ref(true); const toggle = () => { isVisible.value = !isVisible.value; }; </script>

二、v-elsev-else-if

可以创建链式的条件分支,类似于 JavaScript 的if...else if...else

<template> <div> <!-- 条件链 --> <p v-if="score >= 90">优秀!</p> <p v-else-if="score >= 60">及格</p> <p v-else>不及格,需要努力</p> <!-- 计数器控制 --> <button @click="score += 10">加10分</button> <button @click="score -= 10">减10分</button> </div> </template> <script setup> import { ref } from 'vue'; const score = ref(85); </script>

三、v-show替代方案

v-showv-if功能相似,但实现方式不同

  • v-if:真正的条件渲染。切换时,元素会被销毁/重建,会触发组件的生命周期钩子。

  • v-show:通过 CSS 的display: none控制显示/隐藏,元素始终被渲染并保留在 DOM 中。

<template> <div> <!-- 使用 v-show(适合频繁切换的场景) --> <p v-show="showElement">我通过 display: none 隐藏</p> <!-- 使用 v-if(适合条件很少改变的场景) --> <p v-if="showElement">我会被完全移除/添加</p> <button @click=”showElement = !showElement“>切换</button> </div> </template> <script setup> import { ref } from 'vue’; const showElement = ref(true); </script>

四、在<template>上使用v-if

可以在<template>标签上使用v-if来分组渲染多个元素,而不会引入额外的 DOM 元素。

<template> <div> <!-- 分组条件渲染 --> <template v-if="isUserLoggedIn"> <h1>欢迎回来!</h1> <p>这是您的个人主页</p> <button>退出登录</button> </template> <template v-else> <h1>请先登录</h1> <button>登录</button> </template> </div> </template> <script setup> import { ref } from 'vue'; const isUserLoggedIn = ref(false); </script>

五、v-ifv-for一起使用

不推荐在同一元素上同时使用v-ifv-for,因为 Vue 处理指令时,v-for的优先级更高。正确的做法是:

<template> <div> <!-- 错误用法 --> <!-- <li v-for="item in items" v-if="item.isActive">错误:不要这样用</li> --> <!-- 正确用法1:通过计算属性过滤 --> <ul> <li v-for="item in activeItems" :key="item.id">{{ item.name }}</li> </ul> <!-- 正确用法2:在外层使用 <template> --> <template v-for="item in items" :key="item.id"> <li v-if="item.isActive">{{ item.name }}</li> </template> </div> </template> <script setup> import { computed, ref } from 'vue'; const items = ref([ { id: 1, name: '项目A', isActive: true }, { id: 2, name: '项目B', isActive: false }, { id: 3, name: '项目C', isActive: true }, ]); // 通过计算属性过滤 const activeItems = computed(() => items.value.filter(item => item.isActive)); </script>

六、性能与使用建议

特性

v-if

v-show

渲染机制

条件为假时,元素从 DOM 移除

通过display: none隐藏

初始渲染成本

更低(只渲染真值条件)

更高(始终渲染)

切换成本

更高(销毁/重建)

更低(仅切换 CSS)

生命周期

切换时触发组件的mounted/unmounted

无生命周期变化

使用场景

条件很少改变,或需要避免初始渲染开销

频繁切换显示状态

七、实用技巧

1. 权限控制示例

<template> <div> <!-- 根据用户角色显示不同内容 --> <admin-panel v-if="user.role === 'admin'" /> <user-dashboard v-else-if="user.role === 'user'" /> <guest-view v-else /> </div> </template>

2. 数据加载状态

<template> <div> <div v-if="isLoading">加载中...</div> <div v-else-if="error">加载失败: {{ error }}</div> <div v-else>{{ data }}</div> </div> </template>

关键要点

  1. 使用v-if实现真正的条件渲染,适合切换频率低的场景。

  2. 使用v-show实现显示/隐藏切换,适合频繁切换的场景。

  3. <template>包装多个元素,实现分组条件渲染。

  4. 避免在同一元素上同时使用v-ifv-for

  5. 复杂的条件逻辑可考虑使用计算属性方法来简化模板。

条件渲染是 Vue 的核心功能之一,合理使用可以构建出清晰、高效的界面逻辑。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/562296/

相关文章:

  • Linux 内核中的内存管理优化:从理论到实践
  • 如何用React打造经典Windows XP桌面体验:完整实现指南
  • 原创:黄大年茶思屋难题揭榜第11期|5道核心题精简公开·被退稿求技术指正
  • eFuse电子保险丝:现代电路保护的智能选择
  • 【数据结构】字符串模式匹配:暴力算法与 KMP 算法实现与解析
  • Origin绘图进阶:如何在现有图形上叠加散点图与等高线(附完整操作步骤)
  • PingFangSC字体实战:3个关键决策提升中文界面性能与体验
  • 4步终极指南:用OpenCore Legacy Patcher让老Mac重获新生
  • 解决MicroBlaze程序启动难题:Vivado中bit与elf文件合并的完整流程
  • HoRain云--Vue.js循环渲染完全指南:v-for实战技巧
  • 手把手教你用TI官方方案搭建V-I转换器恒流源(含MOSFET选型指南)
  • WinDiskWriter:突破Mac系统限制的Windows启动盘制作革新工具
  • ISL29125 RGB环境光传感器驱动与嵌入式应用实战
  • 终极指南:Windows APK安装工具完整使用教程
  • 2026年媒体发稿平台首选:传声港新媒体平台三大核心平台赋能企业全域传播 - 博客湾
  • MuJoCo仿真实战:用aubo-i5机器人模型搭建你的第一个物理仿真环境(Windows/Linux双平台)
  • React Native Material Design 与 React Native Paper 对比分析:选择合适的Material Design库
  • 面试必备之自动化测试(上)技能参考
  • OneMore社区贡献指南:如何参与开源项目开发
  • OpenCV-Mobile跨平台部署终极指南:Windows、MacOS、Linux全攻略 [特殊字符]
  • 5大场景全覆盖:Converter NOW为全平台用户打造极速单位转换体验
  • 告别串口调试!用WiFi连接MicroROS与ROS2的保姆级教程(附完整代码)
  • Windows 11下PostgreSQL 18.1安装全攻略:从下载到配置pgAdmin的避坑指南
  • dtreeviz性能优化:处理大规模数据集的可视化技巧
  • MiniCPM-o-4.5-nvidia-FlagOS处理Markdown文档效果:使用Typora风格进行优雅排版
  • 从‘听不清’到‘听得清’:VAD(语音端点检测)如何拯救你的语音识别和降噪耳机?
  • Swift 5.10 官方文档中文版:从零开始学 Swift 的 5 个实用技巧
  • 实时手机检测-通用部署案例:Kubernetes集群中弹性扩缩容实践
  • 标题:告别论文焦虑:2026年5款AI写作工具深度横评与实操指南 - 沁言学术
  • win10与ubuntu16.04双系统下使用gparted为ubuntu分区扩容实战