v-for 和 v-if 联合使用在 Vue2 和 Vue3 的不同

Vue2与Vue3中v-for和v-if的使用差异
本文探讨了Vue2和Vue3中v-for与v-if指令结合使用的不同。在Vue2中,尽管v-for优先级高于v-if,但建议避免同时使用,通常通过计算属性进行过滤。而在Vue3中,直接将v-if置于v-for内会导致报错,因为v-if的优先级似乎提升,使得未定义的item尝试访问属性导致错误。解决方案是将v-if条件设置为true。

v-forv-if 联合使用在 Vue2Vue3 的不同

Vue2

其实在 Vue 中关于 v-forv-if 的讨论网上已经很多了, 不过结论都是 Vue2 的. 先说结论的话就是📕v-for 的优先级比 v-if 高, 但是不建议两者放在一起使用📕. 先看代码

<ul>
  <li v-for="(item) in fruits" :key="item.id" v-if="item.mature">{{item.name}}</li>
</ul>
export default {
  data() {
    return {
      fruits: [
        {
          id: "001",
          name: "apple",
          mature: true
        },
        {
          id: "002",
          name: "banana",
          mature: false
        },
        {
          id: "003",
          name: "grape",
          mature: true
        }
      ]
    };
  }
};

其实在写代码时 ESLint 就会提示 v-forv-if 不要一起使用. 反而建议我们通过计算属性来过滤掉 v-if 为假的那些值.
在这里插入图片描述

如果一意孤行也不会报错, 不过页面最终展示如下, 也就是 v-for 优先级高于 v-if 三条都渲染了, 但是第二个因为不满足 v-if 而不存在.
在这里插入图片描述

⚡顺带说一嘴, 如果用 v-show 是一样的, 不过这时 ESLint 没有红线提示.
在这里插入图片描述

Vue3

然而, 在 Vue3v-forv-if 发生了变化. 😱直接报错无法从 undefined 上读取 mature 属性.
在这里插入图片描述

我猜大概率是因为 v-if 的优先级高于 v-for, 然后 item 并没有定义所以为 undefined, 导致的报错, 于是修改了一下代码, 直接让 v-if 为真

<ul>
  <li v-for="(item) in fruits" :key="item.id" v-if="true">{{item.name}}</li>
</ul>

列表出现了, 猜想成立! 👉官网介绍在这里(英文)👈
在这里插入图片描述

谢谢你看到这里, 祝你面试顺利🦆

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值