[前端|vue] v-if 和v-show的区别,为什么功能会类似

v-ifv-show 都是 Vue 中用于条件渲染的指令,但它们之间存在几个关键区别,这些区别导致了它们在不同场景下的适用性也有所不同:

  1. v-if 的特点:

    条件渲染:v-if 是一个动态的条件渲染指令,它会根据表达式的值来决定是否渲染元素。如果条件为假,则元素及其内部的所有内容都不会被渲染到 DOM 中,这可以减少初始渲染时不必要的资源消耗。

    惰性渲染:v-if 是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译并渲染。这对于只在某些条件下才需要渲染的内容来说非常有用,可以提升初次加载性能。

    销毁与重建:当条件变化时,v-if 会销毁并重新创建条件块内的所有内容,包括组件实例、事件监听器等。这意味着每次条件变化时,相关的数据绑定和组件状态都会被重新初始化。

  2. v-show 的特点:

    切换显示:v-show 也是条件渲染指令,但它通过修改 CSS 的 display 属性(通常是 none 或 block)来控制元素的显示或隐藏,而不是像 v-if 那样控制元素的生成与销毁。元素始终会被渲染并保留在 DOM 中,只是简单地切换其可见性。

    初始渲染成本:v-show 在初始渲染时无论条件真假都会渲染元素,这使得它的初始渲染成本较高,但后续切换状态的成本较低,因为它只是改变了 CSS 样式。

    持续存在:由于元素始终存在于 DOM 中,即使初始时不可见,事件监听器和子组件的状态也会被保留,这对于频繁切换状态的场景较为友好,因为不需要反复创建和销毁元素。

  3. 功能类似的原因:

    尽管机制不同,v-if 和 v-show 的最终视觉效果很相似,都能实现根据条件展示或隐藏元素。选择哪一个取决于具体的使用场景和性能需求:

    如果条件很少改变且需要首屏渲染速度,或者需要根据条件控制组件生命周期,应使用 v-if。

    如果频繁切换显示状态,且初始渲染时间不是关键因素,或者希望保持组件状态不被销毁,应使用 v-show。

相关推荐
炫饭第一名1 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫1 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊1 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter1 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折1 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_2 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
不会敲代码12 小时前
前端组件化样式隔离实战:React CSS Modules、styled-components 与 Vue scoped 对比
css·vue.js·react.js
Angelial2 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu2 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu2 小时前
Angular6学习笔记13:HTTP(3)
前端