v-for/v-if使用时的注意点

v-for: 可以循环渲染数组数据,它的语法是:v-for="item in items",其中item是每个数组元素,items是数组本身。

v-if: 可以根据一个条件动态渲染或不渲染某个元素,它的语法是:v-if="isShow",其中isShow是一个布尔值,表示是否渲染该元素。

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">{{item.text}}</li>
    </ul>
    <p v-if="isShow">This is a conditionally rendered element</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      items: [
        { id: 1, text: 'Item 1' },
        { id: 2, text: 'Item 2' },
        { id: 3, text: 'Item 3' }
      ],
      isShow: true
    }
  }
}
</script>

v-for和v-if不要放到一个元素上

因为v-for的优先级比v-if高,如果放在一起用,也是先执行循环渲染一遍,之后在去v-if判断

这样就存在性能问题。

例如,在下面的代码中,在每个 li 元素上同时使用 v-for 和 v-if:

<ul>
  <li v-for="item in items" v-if="item.isActive">
    {{ item.name }}
  </li>
</ul>

这样的写法会导致每个 li 元素都需要进行判断和循环,可能会增加处理量,降低性能。

注:

如果条件出现在循环内部,可以先使用computed计算属性进行一次过滤

当在循环中出现条件时,使用计算属性进行一次过滤是一种有效的方法来缓解问题。这是因为计算属性是在数据改变时自动更新的,而不是在每次渲染时都重新计算。

例如,如果您在循环中使用v-if来控制显示某些元素,则每次渲染时都会重新计算该条件。与此相反,如果您使用计算属性进行过滤,则只有当数据改变时才会重新计算。

示例代码:

// Template
<template>
  <ul>
    <li v-for="item in filteredItems">{{ item.name }}</li>
  </ul>
</template>
// JavaScript
data() {
    return {
        items: [
        { name: 'Item 1', show: true },
        { name: 'Item 2', show: false },
        { name: 'Item 3', show: true }
        ]
    }
},
    computed: {
        filteredItems() {
        	return this.items.filter(item => item.show)
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不会只能哭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值