Vue中v-if和v-show的区别

我们知道 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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`v-if` 和 `v-show` 都是 Vue 用于控制元素显示隐藏的指令,但它们的使用场景和实现方式略有不同。 `v-if` 指令的作用是根据表达式的值的真假条件来销毁或者重新创建元素及组件。当表达式的值为 false 时,元素会被销毁并从 DOM 移除,当表达式的值为 true 时,元素会被重新创建并添加到 DOM 。这种方式在不需要频繁切换元素显示状态的情况下,能够有效减少 DOM 的渲染次数,提高性能。 ```html <template> <div> <span v-if="show">我是一个v-if指令</span> <button @click="toggleShow">切换显示状态</button> </div> </template> <script> export default { data() { return { show: true } }, methods: { toggleShow() { this.show = !this.show } } } </script> ``` `v-show` 指令的作用是根据表达式的值的真假条件来控制元素的显示或隐藏。当表达式的值为 false 时,元素会被隐藏,并且不会从 DOM 移除,当表达式的值为 true 时,元素会被显示。这种方式适用于需要频繁切换元素显示状态的情况,但需要注意,由于元素并没有被销毁,因此可能会影响页面的性能。 ```html <template> <div> <span v-show="show">我是一个v-show指令</span> <button @click="toggleShow">切换显示状态</button> </div> </template> <script> export default { data() { return { show: true } }, methods: { toggleShow() { this.show = !this.show } } } </script> ``` 总结来说: - `v-if` 适合在不需要频繁切换元素显示状态的情况下使用,可以减少 DOM 的渲染次数,提高性能。 - `v-show` 适合在需要频繁切换元素显示状态的情况下使用,但需要注意对页面性能的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值