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

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>

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值