Vue中的v-show和v-if

本文详细对比了Vue中的v-if和v-show指令。v-show通过切换CSS的display属性控制元素显示,适合频繁切换;v-if则直接操作DOM,适用于不频繁切换,性能消耗较大。两者在页面初始化和后续更新时的处理方式不同,选择使用需考虑场景和性能需求。
摘要由CSDN通过智能技术生成

在Vue中,v-show和v-if是我们常用的用来控制元素或组件是否渲染,在面试中,这也是面试官常常提问的问题,那么,这两个指令有什么区别呢???

1、v-show

  • v-show指令的作用是:根据真假值切换元素的显示状态,是响应式的
  • 语法表达v-show = " 表达式 "
  • 指令后面的值会以布尔值的形式出现
  • 本质是通过设置 display:none 来实现隐藏和显示
  • 元素会随着数据的改变而进行同步更新

基本用法如下

<body>
    <div id="root">
        <button id="btn" @click="changeMsg">点我切换显示</button>
        <p v-show="isShow">猜猜我在哪</p>
    </div>
    <script>
        new Vue({
            el:'#root',
            data() {
                return {
                    isShow : false
                }
            },
            methods: {
                changeMsg(){
                    this.isShow = !this.isShow
                }
            },
        })
    </script>
</body>

2、v-if

  • v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染。
  • v-if = "表达式"
  • 本质是通过操纵dom元素来进行切换显示
  • 表达式的值为true的时候元素存在于dom树中,为false的时候从dom树中移除

基本用法如下:

<body>
    <div id="root">
        <button id="btn" @click="changeMsg">点我切换显示</button>
        <p v-if="isShow">猜猜我在哪</p>
    </div>
    <script>
        new Vue({
            el:'#root',
            data() {
                return {
                    isShow : false
                }
            },
            methods: {
                changeMsg(){
                    this.isShow = !this.isShow
                }
            },
        })
    </script>
</body>

3、两者的区别

        1.    原理不同  

  • v-show指令:无论值为true或false,元素始终被渲染到HTML,它只是简单的设置css的style属性,当值为false时,元素被设置style=“display:none”的样,是通过修改元素的的CSS属性(display)来决定实现显示还是隐藏
  • v-if指令:值为true时会渲染到html中,值为false时是不会渲染到html中的,是通过操纵dom元素来进行切换显示

         2.   使用场景不同

  • v-show 适用于需要频繁切换显示元素的场景,因为这个过程中消耗较少

  • v-if 适用于切换次数较少的场景,因为 v-if 的切换需要操作dom元素,此过程会有较大的消耗    

         3.    编译区别

  •  v-show 在页面初始化时就完成了完整的渲染,值的改变不会对页面的加载造成影响
  •  v-if 在表达式返回值切换时,会摧毁组件重新渲染,相当于需要重走一遍生命周期,所以会影响页面的加载速度,造成更大的资源消耗  

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值