VUE为什么不建议v-for和v-if一起使用

在vue2和vue3的官方文档里都写到不推荐 v-if 和 v-for 同时使用。

1.vue3

在vue3中,是因为当它们同时存在于一个节点上时,v-if 比 v-for 的优先级更高。这意味着 v-if 的条件将无法访问到 v-for 作用域内定义的变量别名。 这将会报错。

2.vue2

因为两者的优先级不一样,v-for 的优先级比 v-if 高,如果一起使用,每次渲染时都会先循环再进行条件判断,先循环再做判断会造成性能浪费,使用过程中不要把它们放在同一个元素上。

3.解决办法

a.可通过计算属性computed提前过滤掉那些不需要显示的项
computed: {
  // 得到过滤后的数据
  filteredTodos() {
    return this.todos.filter(todo => !todo.isComplete);
  }
}
b.为了避免渲染本应该被隐藏的列表。将v-if放在外层嵌套 template(页面渲染不生成dom节点),在这一层先进行 v-if 判断,然后在内部进行v-for循环。
<template v-if="isShow">
 
  <p v-for="item in list">
 
</template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值