v-if 和 v-show 的区别

123 阅读3分钟

v-if 和 v-show 的区别

在Vue中,v-if和v-show都是常用的指令,用于控制元素的显示与隐藏。虽然它们的功能类似,但是它们之间还是有一些区别。

v-if

使用v-if指令可以控制元素是否需要渲染到页面上。当绑定的表达式为真时,元素会被渲染,否则不会。具体实现如下:

html复制代码
<template>
  <div>
    <p v-if="show">这是一个段落</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: true
    }
  }
}
</script>

当show的值为true时,段落会被渲染到页面上;当show的值为false时,段落不会被渲染到页面上。

v-show

使用v-show指令可以控制元素的显示与隐藏,但是元素始终存在于DOM树中。当绑定的表达式为真时,元素会显示出来,否则会隐藏。具体实现如下:

html复制代码
<template>
  <div>
    <p v-show="show">这是一个段落</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: true
    }
  }
}
</script>

当show的值为true时,段落会显示出来;当show的值为false时,段落会隐藏。

区别

v-if和v-show之间的区别主要有以下几点:

  1. v-if是动态地添加或删除元素,而v-show只是简单地控制元素的显示或隐藏。
  2. 当初始渲染时,v-show会比v-if具有更高的渲染性能,因为v-show只是简单地修改了元素的样式属性,而v-if需要在DOM树中进行添加或删除元素。
  3. v-if对于不经常改变的元素使用较好,因为它们不需要每次都重新渲染。而v-show对于频繁切换的元素使用较好,因为它们只需要修改样式属性即可。

综上所述,我们应该根据具体的场景来选择使用v-if还是v-show,以达到最优的性能表现。## 两者使用场景

v-if 的使用场景

v-if 的使用场景通常是在需要对元素进行条件渲染的时候使用。由于 v-if 是动态添加或删除元素,所以在元素不经常改变的情况下,使用 v-if 可以减少页面渲染的压力,提高性能。

下面是一个示例,在表格中根据条件筛选出符合要求的数据:

html复制代码
<table>
  <thead>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
      <th>性别</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="item in list" :key="item.id">
      <td>{{ item.name }}</td>
      <td>{{ item.age }}</td>
      <td>{{ item.gender }}</td>
      <td v-if="item.age > 18">{{ item.phone }}</td>
    </tr>
  </tbody>
</table>

上面代码中,当 item.age 大于 18 时,才会渲染电话号码这一列。如果不满足条件,这一列就不会存在于 DOM 树中,减轻了页面的渲染负担。

v-show 的使用场景

v-show 的使用场景通常是用于控制元素的显示与隐藏,适用于频繁切换的元素。由于 v-show 只是简单地修改了元素的样式属性,所以在元素需要频繁切换显示与隐藏的情况下,使用 v-show 可以减少页面渲染的压力,提高性能。

下面是一个示例,展示一张图片,可以通过按钮控制图片的显示与隐藏:

html复制代码
<template>
  <div>
    <img src="/path/to/image.jpg" alt="图片" v-show="showImg">
    <button @click="showImg = !showImg">{{ showImg ? '隐藏' : '显示' }}图片</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showImg: true
    }
  }
}
</script>

上面代码中,点击按钮可以控制图片的显示与隐藏,由于图片需要频繁切换显示与隐藏,所以使用 v-show 更为合适。

总结

v-if 和 v-show 都是用于控制元素显示与隐藏的指令,但是它们之间还是有一些区别。v-if 是动态添加或删除元素,在不经常改变的元素使用较好;v-show 是简单地修改元素的样式属性,在频繁切换的元素使用较好。我们应该根据具体的场景来选择使用 v-if 还是 v-show,以达到最优的性能表现。