Vue中 v-if 和 v-show 的使用

Vue中 v-if 和 v-show 的使用

  • 两者的相同点

    • 功能相同:都可以用来隐藏DOM,且隐藏的DOM不会占据空间

    • 用法相同:判断表达式的真假,真就显示DOM,假就隐藏DOM

      <div v-if="expression"></div>
      <div v-show="expression"></div>
      
  • 两者的不同点

    • 控制手段
      • v-if是将DOM彻底地从页面中删除来让DOM不展示在页面中,改变了页面的DOM解构
      • v-show是通过设置CSS的属性display:none来让DOM不展示在页面上,但是DOM仍然存在,可以通过F12查看到被隐藏的DOM,没有改变页面的DOM解构
    • 编译过程
      • v-if的条件切换会引起一个局部编译的过程,切换过程中会适当销毁和重建内部的事件监听器和子组件
      • v-show的条件切换并不会引起局部编译,只是简单的基于CSS的切换
    • 触发钩子
      • v-if的条件切换会触发组件的钩子。false变为true的时候,触发组件的beforeCreatecreatebeforeMountmounted钩子,由true变为false的时候触发组件的beforeDestorydestoryed方法
      • v-show的条件切换不会触发组件的钩子
    • 性能消耗
      • v-if有更高的切换消耗
      • v-show有更高的初始渲染消耗
  • v-ifv-show的应用场景

    • v-if适合那些切换不频繁的DOM,切换需要触发组件钩子的DOM
    • v-show适合那些切换频繁的DOM,切换不需要触发组件钩子的DOM

拓展display:nonevisibility:hidden

  • 相同点:都能将DOM从页面中进行隐藏,但隐藏的DOM还在,能使用F12查看到

  • 不同点

    • 隐藏效果

      • display:none隐藏的DOM,它宽度、高度等各种属性值都将丢失,不占据页面上的位置

      • visibility:hidden隐藏的DOM,它的宽度、高度等各种属性值不会丢失,仍然会咱局页面上原有的位置,只是视觉上的隐藏

    • 加载

      • display:none隐藏的DOM只有编程block时才会被加载到页面
      • visibility:hidden一开始就会被加载到页面
    • 继承性

      • display:none设置后,其后代全部默认继承该属性,且无法进行修改
      • visibility:hidden设置后,其后代元素全部默认继承该属性,但是其后元素使用了visibility:visible,则从该个后代开后,其下所有的后代都不继承visibility:hidden属性,也就是都可以显示出来
    • 渲染

      • display:none会触发reflow(回流),进行渲染
      • visibility:hidden只会触发repaint(重绘),因为没有发现位置变化,不进行渲染




参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值