Vue.js 中的 `v-if` 和 `v-show`:理解与应用

简介: Vue.js 中的 `v-if` 和 `v-show`:理解与应用

官网解释

Vue.js 中的 v-if 和 v-show:理解与应用

在Vue.js开发中,v-if和v-show是两个常用的指令,用于控制元素的显示与隐藏。尽管它们在实现效果上相似,但在工作机制和适用场景上却有明显的不同。本文将对比这两个指令,并通过具体案例帮助大家更好地理解和应用它们。

v-if 与 v-show 的工作机制

v-if

v-if是条件渲染指令,它根据表达式的值,来决定是否渲染该元素及其子元素。当表达式为false时,元素从DOM中完全移除,表达式为true时,元素重新渲染并插入DOM。

特点:
  • 完全控制元素的渲染与销毁。
  • 初次加载时不渲染条件为false的元素。
  • 切换条件时有更高的性能消耗,因为会涉及DOM的重新创建和销毁。

v-show

v-show是基于CSS的显示隐藏控制,它通过切换元素的display属性来控制可见性。当表达式为false时,元素的display属性被设置为none,但该元素仍然保留在DOM中。

特点:
  • 控制元素的可见性,但不会移除元素。
  • 初次加载时会渲染所有元素,不论条件为true还是false。
  • 切换条件时性能较好,因为仅仅是切换display属性。

应用案例对比

案例一:登录按钮

假设我们有一个登录按钮,当用户未登录时显示登录按钮,登录后显示退出按钮。

使用 v-if
<template>
  <div>
    <button v-if="!isLoggedIn" @click="login">Login</button>
    <button v-if="isLoggedIn" @click="logout">Logout</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isLoggedIn: false,
    };
  },
  methods: {
    login() {
      this.isLoggedIn = true;
    },
    logout() {
      this.isLoggedIn = false;
    },
  },
};
</script>
使用 v-show
<template>
  <div>
    <button v-show="!isLoggedIn" @click="login">Login</button>
    <button v-show="isLoggedIn" @click="logout">Logout</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isLoggedIn: false,
    };
  },
  methods: {
    login() {
      this.isLoggedIn = true;
    },
    logout() {
      this.isLoggedIn = false;
    },
  },
};
</script>

案例二:切换大数据表格

假设我们有一个大数据表格,在用户点击按钮时显示表格,再次点击时隐藏表格。

使用 v-if
<template>
  <div>
    <button @click="toggleTable">Toggle Table</button>
    <table v-if="showTable">
      <!-- 假设这里有很多行数据 -->
    </table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      showTable: false,
    };
  },
  methods: {
    toggleTable() {
      this.showTable = !this.showTable;
    },
  },
};
</script>
使用 v-show
<template>
  <div>
    <button @click="toggleTable">Toggle Table</button>
    <table v-show="showTable">
      <!-- 假设这里有很多行数据 -->
    </table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      showTable: false,
    };
  },
  methods: {
    toggleTable() {
      this.showTable = !this.showTable;
    },
  },
};
</script>

使用建议

  • 使用 v-if:适用于条件变化不频繁,或初始状态为false时不需要渲染该元素的情况。例如,切换整个页面或模块。
  • 使用 v-show:适用于需要频繁切换显示隐藏状态的元素,因为它不会销毁和重建DOM结构。例如,切换标签页或简单的显示隐藏效果。

通过这篇文章,相信大家对v-if和v-show的区别和使用场景有了更清晰的认识。希望这些案例能帮助大家在实际开发中做出更合适的选择。如果你有任何问题或见解,欢迎在评论区与我们分享讨论!

相关文章
|
15天前
|
数据采集 JavaScript 前端开发
理解并应用:JavaScript响应式编程与事件驱动编程的差异
了解JavaScript的响应式编程与事件驱动编程至关重要。事件驱动编程基于事件触发函数执行,如用户交互或系统事件。响应式编程则关注数据流变化,利用Observables自动响应更新。在爬虫代理IP的Web Scraping示例中,两者分别通过axios和rxjs显示了数据抓取的不同处理方式。掌握这两者能提升异步操作的效率和代码质量。
理解并应用:JavaScript响应式编程与事件驱动编程的差异
|
6天前
|
JavaScript 前端开发
Vue.js的`v-if`和`v-show`都用于条件渲染,但实现方式不同
【6月更文挑战第26天】Vue.js的`v-if`和`v-show`都用于条件渲染,但实现方式不同。`v-if`在条件为真时编译并渲染元素,不生成DOM时性能更高,适合不频繁切换的情况;而`v-show`初始总会渲染,通过CSS切换显示,适合频繁切换且需初始化渲染的场景,因其避免DOM重建。选择时应考虑元素显示的频率和初始状态。
14 5
|
4天前
|
JSON JavaScript 中间件
Express.js:构建轻量级Node.js应用的基石
**Express.js 概览**:作为Node.js首选Web框架,Express以其轻量、灵活和强大的特性深受喜爱。自2009年以来,其简洁设计和丰富中间件支持引领开发者构建定制化应用。快速开始:使用`express-generator`创建项目,安装依赖,启动应用。示例展示如何添加返回JSON消息的GET路由。Express适用于RESTful API、实时应用等多种场景,社区支持广泛,助力高效开发。
7 1
|
13天前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
27天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的代驾应用系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的代驾应用系统附带文章和源代码部署视频讲解等
166 21
|
20天前
|
前端开发 JavaScript 网络协议
深入探讨其在JavaScript中的应用
【6月更文挑战第12天】WebSockets是为解决HTTP协议在实时通信中的局限而生的一种全双工通信协议,基于TCP,适合在线聊天、游戏等场景。JavaScript中的WebSocket API使浏览器与服务器能建立持久连接,方便数据实时传输。通过创建WebSocket对象、监听事件(open、message、error、close)来管理连接、发送/接收数据及处理错误。相较于AJAX轮询和长轮询,WebSockets更高效实时,是现代Web实时应用的理想选择。
24 3
|
22天前
|
前端开发 JavaScript 开发者
函数式编程在JavaScript中的应用
【6月更文挑战第10天】本文探讨了函数式编程在JavaScript中的应用,介绍了函数式编程的基本概念,如纯函数和不可变数据。文中通过示例展示了高阶函数、不可变数据的使用,以及如何编写纯函数。此外,还讨论了函数组合和柯里化技术,它们能提升代码的灵活性和可重用性。掌握这些函数式编程技术能帮助开发者编写更简洁、可预测的JavaScript代码。
|
1天前
|
JavaScript UED
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
8 0
|
27天前
|
Java 测试技术 数据安全/隐私保护
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
13 0
基于ssm+vue.js+uniapp小程序的《数据库原理及应用》课程平台附带文章和源代码部署视频讲解等
|
18天前
|
JavaScript Shell 开发者
怎样使用Nest.js快速构建高效Node.js应用?
这篇博客介绍了Nest.js,一个基于TypeScript的Node.js框架,适用于构建可维护和可扩展的服务器端应用。文章引导读者快速入门,包括安装Node.js和Nest.js CLI,创建新项目,安装依赖以及启动开发服务器。通过访问`http://localhost:3000`,可以看到&quot;Hello World!&quot;,证明应用已成功运行。Nest.js因其模块化架构和强大的功能,成为现代Web开发的热门选择。