v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例

简介: 这篇文章详细阐述了Vue中`v-if`和`v-show`指令的共同点、区别、使用场景以及它们在组件和普通元素上附属时的不同表现,并通过示例展示了状态改变时对钩子函数调用的影响。

文章目录

  • 1、v-show与v-if的共同点
  • 2、v-show与v-if的区别
  • 3、v-show与v-if的使用场景
  • 4、附属到组件和普通元素时的情况
    • 4.1、v-show
    • 4.2、v-if
  • 5、具体实现的效果
    • 5.1 查看是否渲染
    • 5.2 查看调用的钩子函数
  • 6、钩子函数实现的过程分析

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

v-show和v-if的作用效果是相同的(不包含v-else),都可以控制元素(组件或普通元素)在页面是否显示。用法上也是相同的

<Model v-show="isShow" /> 
<Model v-if="isShow" />
  • 当表达式为true的时候,都会占据页面的位置
  • 当表达式都为false时,都不会占据页面位置

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

1、控制手段不同。 2、编译过程不同 。 3、编译条件不同

  • 控制手段:v-show隐藏则是为该元素添加css--display:none,dom元素依旧还在。v-if显示隐藏是将dom元素整个添加或删除

  • 编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换

  • v-show 由false变为true的时候不会触发组件的生命周期

  • v-if由false变为true的时候,触发组件的beforeCreate、create、beforeMount、mounted钩子,由true变为false的时候触发组件的beforeDestory、destoryed方法

性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

3、v-show与v-if的使用场景

  • v-if 与 v-show 都能控制dom元素在页面的显示

  • v-if 相比 v-show 开销更大的(直接操作dom节点增加与删除)

  • 如果需要非常频繁地切换,则使用 v-show 较好

  • 如果在运行时条件很少改变,则使用 v-if 较好

4、附属到组件和普通元素时的情况

4.1、v-show

  • 当v-show指令附属于普通元素时,v-show指令状态变化不会影响父组件的生命周期。
  • 当v-show指令附属于组件时,v-show指令状态变化时,父组件和本身组件的生命周期都不会被影响。

4.2、v-if

  • 当v-if指令附属于普通元素时,v-if指令状态变化会使得父组件的dom发生变化,父组件将会更新视图,所以会触发父组件的beforeUpdate和updated钩子函数。
  • 当v-if指令令附属于组件时,v-if指令状态变化对父组件的影响和上一条一致,但是对于本身组件的生命周期的影响是不一样的。

v-if从false切换到true时,会触发beforeCreate,created,beforeMount,mounted钩子。
2.v-if从true切换到false时,会触发beforeDestroy和destroyed钩子函数。

5、具体实现的效果

5.1 查看是否渲染

v-if是true,v-show是false的情况。
v-show 通过css样式控制,实际节点还存在。
在这里插入图片描述


v-if是false的时候,节点直接不存在

在这里插入图片描述

5.2 查看调用的钩子函数

v-if从true切换到false时,会触发beforeDestroy和destroyed钩子函数

在这里插入图片描述


v-if从false切换到true时,会触发beforeCreate,created,beforeMount,mounted钩子

在这里插入图片描述

6、钩子函数实现的过程分析

位置:F:\java学习资料(前端)\Vue相关资料\代码\VUE-DEMO
git提交:v-show和v-if案例分析。

在这里插入图片描述
在这里插入图片描述

相关文章
|
SQL JSON 前端开发
若依RuoYi脚手架二次开发教程(二次开发必学技能)
本次我们将通过一个菜品管理模块开发的案例,来演示拿到若依框架后,如何在若依管理系统上进行二次开发,升级改造为自己的管理系统。适合以若依作为项目脚手架的公司开发人员、毕业设计的学生及开源项目学习者。
8294 1
若依RuoYi脚手架二次开发教程(二次开发必学技能)
vue 中 axios 的安装及使用
本文介绍了在Vue项目中安装和使用axios的方法。首先通过命令`npm install axios --save-dev`安装axios,然后在组件的`created`生命周期钩子中使用`axios.get`异步获取数据,并将获取的数据更新到组件的`data`中。文中提供了完整的示例代码,包括安装命令、验证安装成功的步骤、Vue组件的模板、脚本和样式。
vue 中 axios 的安装及使用
|
缓存 前端开发 JavaScript
前端性能优化:提升网页加载速度的10个技巧
【10月更文挑战第25天】在互联网时代,网页加载速度直接影响用户体验和搜索引擎排名。本文介绍了10个提升网页加载速度的技巧,包括减少HTTP请求、启用压缩、使用CDN、延迟加载非关键资源、优化图片、减少重定向、使用浏览器缓存、优化CSS和JavaScript、异步加载JavaScript以及代码分割。通过这些方法,可以显著提高网页性能,改善用户体验。
3045 5
|
Java Windows
解决IDEA .properties文件中文乱码的问题
解决IDEA .properties文件中文乱码的问题
4757 0
解决IDEA .properties文件中文乱码的问题
|
存储 JavaScript API
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
Vue状态管理深度剖析:Vuex vs Pinia —— 从原理到实践的全面对比
1284 2
|
XML Java 程序员
保姆级教程,手把手教你实现SpringBoot自定义starter
保姆级教程,手把手教你实现SpringBoot自定义starter
14213 2
保姆级教程,手把手教你实现SpringBoot自定义starter
|
缓存 监控 安全
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
17684 4
|
XML Java Maven
idea配置maven步骤及常见问题
本文介绍了在IDEA中配置Maven的详细步骤,包括Maven的下载、系统环境变量的配置、Maven本地仓库的设置、镜像加速的配置,以及在IDEA中指定Maven路径和配置文件。同时,还提供了解决每次新建项目需要重新手动配置Maven问题的方法。
idea配置maven步骤及常见问题
|
SQL druid Java
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
8104 0

热门文章

最新文章