v-if 和 v-show

共同点

  • 效果相同
  • 使用方式类似 (else-if)

区别

  • 控制手段不同:
    • v-show 是通过控制 css 的 display 属性进行控制, dom 元素一直存在
    • v-if 则是通过 dom 节点的添加与删除进行节点渲染
  • 编译过程不同:
    • v-show 只需进行简单的 css 切换
    • v-if 则需要进行局部编译/卸载, 切换过程中会触发组件生命周期
      • 当有 false 变true 时,触发组件的 beforeCreate、 create、 beforeMount、 mounted 生命钩子
      • 反之, 则触发 beforeDestory、destoryed
  • 性能消耗:
    • v-show 初次渲染消耗大
    • v-if 切换消耗大

应用场景

  • 频繁切换: 推荐使用 v-show
  • 运行时条件很少改变: 则使用 v-if