我们知道 v-if 和 v-show 都是显示隐藏,那么它们都有什么区别和共同点呢?下面我们就来探究一下!
一、Vue官方说法:
1.v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。
2.带有v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS property display。
3.v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
4.v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
5.相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
6.一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
个人理解:
一、v-if 和 v-show 的区别:
共同点: 都可以让元素显示和隐藏
不同点:
v-if 是通过创建和销毁节点来达到显示和隐藏的视觉效果
v-show 是通过修改 style 里面的 display 属性来让元素显示和隐藏,当true显示时,style属性为 display:block;,false隐藏时,style属性为display:none;
<body>
<div id="app">
<p v-if="flag">我是v-if</p>
<p v-show="flag">我是v-show</p>
<button @click="flag = !flag">切换</button>
</div>
<script>
var VM = new Vue({
el:'#app',
data:{
flag:true
}
})
</script>
</body>
切换前:
切换后:
二、v-if 和 v-show 的用法
什么时候用 v-if
用户很少去切换它,根本就不用这个元素的时候使用 v-if,因为 v-if 的值为false的时候,这个节点就不会加载渲染(都不创建),它有更大的初始化开销
什么时候用 v-show
如果你想频繁切换一个元素,显示和隐藏的时候,推荐使用 v-show,因为它只需要修改 display 属性就行,提高了性能,而v-if要删除和创建节点,它的开销更大
三、总结
1.它们两个都是根据表达式的真假判断元素显示与隐藏
2.v-if只有在条件为真时,才对元素进行渲染,v-show无论初始条件为何,元素总会被渲染。
3.v-show初始开销更高,v-if的切换开销更高
4.频繁切换时用v-show;运行条件很少改变时用v-if