v-if和v-show的区别

v-if与v-show区别

v-if和v-show都能控制元素在页面是否显示,但它们的工作机制和适用场景有所不同。

v-if

当v-if的值为false时,Vue不会渲染该元素到DOM中;只有当其值变为true时,才会真正地创建并插入DOM。因此,v-if在切换频繁的情况下开销较大,因为它涉及到DOM的添加或移除。但是,对于那些初始渲染时不需要展示或者很少切换显示状态的元素来说,使用v-if更为合适。

<h1 v-if="isShow">内容</h1>

v-show

v-show只是简单地通过CSS的display属性来控制元素的显示或隐藏。无论v-show的条件是真还是假,元素总是会被渲染到DOM中,并且只是简单地切换样式。这意味着v-show更适合于那些需要频繁切换显示/隐藏状态的场景,因为它的开销主要在于CSS样式的更改,而不是DOM的操作。

<h1 v-show="isShow">内容</h1>

在这里插入图片描述

总结

总结来说,如果你需要根据条件判断是否渲染某个元素,尤其是当这个条件很少变化时,推荐使用v-if。而如果元素需要频繁地显示或隐藏,则应该考虑使用v-show。选择合适的指令可以提高应用的性能和响应速度。

v-for和v-if的优先级(vue3)

当 v-if 和 v-for 同时存在于一个元素上的时候,v-if 会首先被执行。同时使用 v-if 和 v-for 是不推荐的,因为这样二者的优先级不明显。

<template>
  <div>
    <template v-for="item in List" v-if="isShow">
      <li v-if="item.isShow">
        {{ item.label }}
      </li>
    </template>
  </div>
</template>

<script setup>
import { ref } from "vue";
const isShow = ref(false);
const List = ref([
  { label: "1", isShow: false },
  { label: "2", isShow: true },
  { label: "3", isShow: true },
]);
</script>

如下编码时就会抛出一个错误,这意味着 v-if 的条件将无法访问到 v-for 作用域内定义的变量别名

<template>
  <div>
    <li v-for="item in List" v-if="item.isShow">
      {{ item.label }}
    </li>
  </div>
</template>

<script setup>
import { ref } from "vue";
const List = ref([
  { label: "1", isShow: false },
  { label: "2", isShow: true },
  { label: "3", isShow: true},
]);
</script>

在这里插入图片描述
我们可以这样写

<template>
  <div>
    <template v-for="item in List">
      <li v-if="item.isShow">
        {{ item.label }}
      </li>
    </template>
  </div>
</template>

<script setup>
import { ref } from "vue";
const List = ref([
  { label: "1", isShow: false },
  { label: "2", isShow: true },
  { label: "3", isShow: true },
]);
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值