Vue.js的`v-if`和`v-show`都用于条件渲染,但实现方式不同

简介: 【6月更文挑战第26天】Vue.js的`v-if`和`v-show`都用于条件渲染,但实现方式不同。`v-if`在条件为真时编译并渲染元素,不生成DOM时性能更高,适合不频繁切换的情况;而`v-show`初始总会渲染,通过CSS切换显示,适合频繁切换且需初始化渲染的场景,因其避免DOM重建。选择时应考虑元素显示的频率和初始状态。

Vue.js 中的 v-ifv-show 指令都可以用来根据条件控制元素的显示与隐藏,但它们在实现机制、渲染过程和性能消耗上有所不同:

  1. 渲染时机与编译过程

    • v-if:这是一种“真正”的条件渲染,它会根据表达式的值来决定是否编译并渲染元素及其包含的子组件。当条件为 false 时,不会渲染任何内容,对应的DOM节点也不会被添加到文档中;当条件变为 true 时,才会开始渲染该部分的内容。
    • v-show:不论初始条件如何,该指令控制的元素总是会被编译并渲染到DOM中,只是通过CSS样式(通常是将display属性设置为none)来隐藏元素。当条件改变时,它并不销毁或重建DOM,而是简单地切换元素的display属性以展示或隐藏。
  2. 性能开销

    • v-if:由于它是条件性的编译/销毁 DOM 元素,因此初始渲染没有元素时消耗较少,但在条件切换时如果需要创建或销毁元素,则会有更高的开销,尤其是对于复杂的元素结构。
    • v-show:初始渲染时无论条件如何都会创建元素,所以有较高的初始渲染成本,但由于只是简单的切换CSS样式,所以在频繁切换显示状态时,相对于 v-if 来说性能损耗较小。
  3. 使用场景建议

    • 当一个元素可能不会经常切换显示状态或者初始化时就不应该渲染时,使用 v-if 更合适。
    • 如果某个元素需要频繁切换显示状态并且初始化时就应该被渲染出来,那么使用 v-show 可能是更好的选择,因为它避免了反复的DOM操作。例如,在做动画效果或只需简单显示/隐藏时,使用 v-show 较为适合。

总结来说,v-if 是用于条件性地执行DOM更新,强调的是是否渲染;而 v-show 则始终渲染元素,只是简单地切换元素可见性。

目录
相关文章
|
12天前
|
JavaScript
vue实战--v-for 遍历渲染按钮的两种实现方案(重点:按钮点击事件的绑定技巧)
vue实战--v-for 遍历渲染按钮的两种实现方案(重点:按钮点击事件的绑定技巧)
15 1
|
13天前
|
JavaScript
vue 复杂表格的遍历渲染
vue 复杂表格的遍历渲染
14 2
|
11天前
|
JavaScript
vue 渲染树型数据(含树型数据转化为一维数组的方法,包括每个节点的深度和深度列表)
vue 渲染树型数据(含树型数据转化为一维数组的方法,包括每个节点的深度和深度列表)
13 0
|
11天前
|
JavaScript
vue v-for循环渲染动态ref表单校验的实现技巧
vue v-for循环渲染动态ref表单校验的实现技巧
33 0
|
12天前
|
JavaScript 前端开发 测试技术
|
14天前
|
JavaScript UED
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
24 0
|
14天前
|
JavaScript 前端开发 大数据
Vue.js 中的 `v-if` 和 `v-show`:理解与应用
Vue.js 中的 `v-if` 和 `v-show`:理解与应用
21 0
|
2天前
|
JavaScript
|
3天前
|
JavaScript
【vue】el-dialog 内的tinymce弹窗被遮挡的解决办法 及 tinymce打开弹出菜单后直接关闭对话组件,导致该弹出菜单残留
【vue】el-dialog 内的tinymce弹窗被遮挡的解决办法 及 tinymce打开弹出菜单后直接关闭对话组件,导致该弹出菜单残留
14 6
|
1天前
|
存储 缓存 JavaScript
vue代码优化方案
【7月更文挑战第13天】 **Vue.js 优化要点:** 分解大组件以提高复用性和加载速度;利用计算属性与侦听器优化数据处理;使用Object.freeze()减少响应式数据;借助Vuex或Composition API管理状态;实现虚拟滚动和无限加载提升长列表性能;路由懒加载减少初始加载时间;用Vue DevTools检测性能瓶颈;定期代码审查与重构;应用缓存策略;遵循最佳实践与团队规范,提升应用整体质量。
10 2