v-if与v-show的区分(vue2)

280 阅读2分钟

学习不是生活的全部,但无学习则生活缺少了许多

学过vue的小伙伴或多或少都用过v-if或者v-show,也都知道是控制元素显示与隐藏的指令,它们的区别主要在于渲染方式不同,但是有一些小伙伴就没有在意过这两个到底有什么区别,今天这篇文章主要就是讲述v-if与v-show他们俩的异曲同工之妙

话不多说先上代码

先看v-show
<template>
  <div>
    <div v-show="isShow_true">我又出来了</div>
    <div v-show="isShow_false">我又进去了</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow_true: true,
      isShow_false: false,
    };
  },
};
</script>

这便是一个简单的两行文字显示隐藏

页面最终展示出来的效果就是如下:

再看v-if

<template>
  <div>
    <div v-if="isIf_true">我又跳进来了</div>
    <div v-if="isIf_false">我又跳出去了</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isIf_true: true,
      isIf_false: false,
    };
  },
};
</script>

这个时候就会有长得帅的小伙伴问了:这不是一样的效果吗,有啥区别呢?

问得好啊,那就话不多说,直接看结果:

先看v-show

image.png

再看v-if

image.png

这个时候就有细心的小伙伴发现区别了,其实v-show只是把值为false的DOM元素的display的值更改为none,以此来让页面元素隐藏,但是v-if直接把值为false的DOM元素没有渲染

由此可得:

v-if通过条件判断来决定是否渲染DOM结构。当v-if的表达式为false时,对应的DOM元素就不会被渲染到页面上,当表达式变为true时才会被渲染出来。

v-show则是通过CSS属性display的值来控制元素是否显示。当v-show的表达式为false时,对应的DOM元素依然会在页面上存在,只是将其display属性设置为none;当表达式变为true时,display属性则会被设置为原先的值,元素也会显示出来

各自的优点

v-show:可以快速地切换元素的显示状态,但相比之下会增加一些不必要的DOM操作

v-if:可以减少不必要的DOM操作,从而提高性能,但在频繁切换、有大量嵌套的情况下可能会影响渲染速度

总结:在使用时需要根据具体情况进行选择,如果需要频繁切换元素的显示状态时,可以使用v-show;如果需要减少 DOM 操作时,可以使用v-if