VUE中的v-if与v-show

本文对比了Vue.js中v-if与v-show指令的区别:v-if通过动态添加或删除DOM实现元素显示,适用于条件变化不频繁的情况;而v-show则通过CSS控制元素可见性,更适合频繁切换的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.共同点
都是动态显示DOM元素
2.区别
(1)手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;
(2)编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;
(3)编译条件:v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
(4)性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;
(5)使用场景:v-if适合运营条件不大可能改变;v-show适合频繁切换。
 
Tips:(1)如果v-show作用的元素,css文件中display:none,通过v-show进行设置不能显示该元素;
原因:v-show控制显隐,是通过js代码去修改元素的element style,如果value为false,设置display: none;如果value为true,设置display: '';于是value为true时,只能将element style中的display效果清除,并不能覆盖css中的display效果;
如下图所示,value=true时,v-show改变的是element.style,由于无效,显示效果由css文件中的display决定。
 
 
 
解决办法:使用v-show的话,在vue解析之前隐藏DOM的话,尽量在style属性里面设置display的值,不要在css文件中。
<ul v-touch:tap="message=2" style="display: none" v-show="show">
### Vue.js 中 `v-if` 和 `v-show` 指令详解 #### 条件渲染指令简介 Vue.js 提供了两种主要的条件渲染指令:`v-if` 和 `v-show`。这两种指令都允许开发者基于表达式的真假来控制 DOM 元素的显示否,但在实现方式和性能表现上有显著差异。 #### `v-if` 指令的工作原理 当使用 `v-if` 指令时,如果绑定的表达式返回 false 或者其他假值,则对应的元素不会被渲染到页面中;反之则会正常渲染该元素[^2]。这意味着每次切换状态都会触发完整的组件销毁重建过程,在首次加载或数据变化较大情况下适合采用此方法。 ```html <template> <div> <!-- 当 'show' 变量为真时才会渲染 h1 --> <h1 v-if="show">Hello Vue.js!</h1> <button @click="toggleShow">Toggle Show</button> </div> </template> <script> export default { data() { return { show: true, }; }, methods: { toggleShow() { this.show = !this.show; } } }; </script> ``` #### `v-show` 指令的应用场景 相比之下,`v-show` 不会影响 HTML 结构本身的存在否,而是通过 CSS 属性 `display:none;` 控制可见性。因此对于频繁切换显示/隐藏需求而言更为高效,因为不需要重新编译模板并创建新的节点实例[^4]。 ```html <!-- 使用 v-show 实现相同效果 --> <h1 v-show="show">Hello Vue.js!</h1> ``` #### 性能对比分析 - **初次渲染**:`v-if` 需要更多计算资源完成初始化操作; - **动态更新**: 对于经常变动的状态推荐使用 `v-show` ,因为它只需改变样式属性即可达到目的而不必重绘整个DOM树结构; - **内存占用**: 如果元素长时间处于不可见状态,`v-if` 更加节省空间,因为它完全移除了不必要的HTML片段[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值