当前位置: 首页 > news >正文

VUE 中的 v-for 和 v-if 是否可以共存

VUE 中的 v-for 和 v-if 是否可以共存

    • 前言
    • 1、面试经
    • 2、正确回答
    • 3、总结
      • 总结:

前言

要成功,先发疯,头脑简单往前冲!

三金四银,金九银十,多学知识,也不能埋头苦干,要成功,先发疯,头脑简单往前冲!
最近发现很多人也在问我v-for 和 v-if 的面试问题,那么下面我就个大家分析一下!

在这里插入图片描述

1、面试经


提到这个问题,很多人肯定会脱口而出:1. Vue2 中 不可以2. Vue3 中 可以再往深问,可能少部分人会回答出:1. Vue2 中 v-for 优先级比 v-if2. Vue3 中 v-if 优先级比 v-for

但是其实很多人都是背的,具体为啥会这样,很多人都没搞清楚,稍微再往深一问,95%的人就回答不出来了~

分析Vue2:

在项目中使用 v-for 和 v-if 共存与一个标签上,Vue2 中肯定会警告我们,不建议这么做,但是为啥不建议,根本没几个人知道~

在这里插入图片描述

	可以看到在 Vue2 中,会先循环,然后在循环中去判断,判断为真则正常渲染,判断为假则执行 _e 函数,_e函数就是注释的意思,就是把判断为假的节点注释掉,也就是:1、先走 v-for 循环 32、在循环体中走 v-if 判断3、判断 item === 2 则正常渲染,item === 2 则把这个节点注释掉所以最终选出出来 13 两个节点

因为其实我们只需要渲染2个节点,但是最终还是循环了3次,造成了性能浪费,也就是 v-for 优先级高于 v-if,共存时会造成性能浪费

分析Vue3:

但是在 Vue3 中,v-for 和 v-if 却是可以共存的,为什么呢?我们还是拿最简单的代码来分析

在这里插入图片描述

可以到这个网站:**https://play.vuejs.org/**,看到解析后的代码

在这里插入图片描述
在这里插入图片描述

可以看到,跟 Vue2 不同的是,Vue3 中是先走判断,然后再走循环的,也就是:1、先走 v-if 判断2、如果 item !== 2,就去走循环也就是 v-for3、如果 item == 2,就执行 createCommandVNode,创建一个注释节点也就是在 Vue3 中,v-if 优先级是高于 v-for 的,真正循环的只有13这两个节点,这提高了性能!因为在 v-for 和 v-if 共存的时候,Vue3 会在底层帮我们转换成

在这里插入图片描述

2、正确回答

	1、首先解答完vue2和vue3后的利和弊2、给出如何解决这个问题的思路,如使用computed处理

3、总结


总结就是不要让 v-if 和 v-for 共存在同一个标签中,遇到这种情况需要使用 computed 去计算,然后再去渲染!

在这里插入图片描述


总结:

前端路上 | 所知甚少,唯善学。
各位小伙伴有什么疑问,欢迎留言探讨。

— 关注我:前端路上不迷路 —




http://www.lryc.cn/news/284571.html

相关文章:

  • kubernetes 权限控制
  • vue中父组件异步传值,渲染问题
  • 09前后端分离+SSM整合的小案例
  • 模仿ProTable创建ProTable组件
  • 新品发布 | 多通道总线记录仪TLog1004,是你期待的吗?
  • Double数据类型保留3位小数
  • 08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)
  • 基于JavaWeb+SSM+Vue停车场微信小程序系统的设计和实现
  • VUE---自定义指令
  • 开发安全之:Cross-Site Scripting (XSS) 漏洞
  • 代码随想录算法训练营第二十四天| 77. 组合
  • 虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!
  • What is `StringEscapeUtils.escapeHtml4` does?
  • Dubbo 的心脏:理解和应用多种协议【十三】
  • 操作系统实验报告
  • IPv6--ACL6(IPv6访问控制列表--基本ACL6配置)
  • C和指针课后答案
  • C语言——大头记单词
  • 根据自己修改后的容器制作镜像并上传docker hub
  • Maven 基础安装配置及使用
  • redis 持久化机制
  • MySQL(视图,存储函数,存储过程)
  • rockchip 平台 linux FIT 打包格式介绍
  • 虚拟机安装宝塔的坑
  • Ubuntu使用QtCreator + CMake 开发C/C++程序
  • 【分布式监控】zabbix与grafana连接
  • 02-编程猜谜游戏
  • Web3解密:区块链技术如何颠覆传统互联网
  • java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)
  • 域环境权限提升