v-if和v-show区别

82 阅读1分钟

前言

在面试时,面试官好像很喜欢问v-if和v-show有什么区别,那我们应该回答什么咧,以下来说说我自己的答案~

v-if

  • 切换隐藏或显示时直接控制dom元素节点的增加和删除
  • 切换隐藏或显示时会改变生命周期
  • 有更高的切换开销
  • 具有惰性,如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)
<template>
  <div class="container">
    <button @click="handleClick">显示/隐藏</button>
    <div v-if="show">内容</div>
  </div>
</template>

<script>

export default {
  data () {
    return {
      show: true  
    }
  },
  methods: {
     handleClick() {
      this.show = !this.show
    }
  }
}
</script>

v-show

  • 切换隐藏或显示时通过display:none来实现,dom元素依然存在页面上
  • 切换隐藏或显示时不会触发生命周期
  • 有更高的初始渲染开销
  • 元素始终被编译并保留,只是简单地基于 CSS 切换。
<template>
  <div class="container">
    <button @click="handleClick">显示/隐藏</button>
    <div v-show="show">内容</div>
  </div>
</template>

<script>

export default {
  data () {
    return {
      show: true  
    }
  },
  methods: {
     handleClick() {
      this.show = !this.show
    }
  }
}
</script>

总结

  • 两者都可以控制dom元素在页面显示和隐藏
  • 如果频繁的切换,则使用v-show
  • 如果切换的比较少,则用v-if