v-if和v-for不能同时的原因: v-for的执行优先比v-if要高

举个例子

<template><div class="hello"><div  v-for="(item,index) in list" v-if="index === 9" :key="item" ></div></div>
</template><script>
export default {name: "IndexCom",data(){return {list:[1,2,3,4,5,6,7,8,9,10]   //需要遍历的数据}}
};
</script><style scoped>
</style>

上面这组代码和下面这组是等价的

<template><div class="hello"><div v-if="0 === 10"></div>   //第1次判断<div v-if="1 === 10"></div>   //第2次判断<div v-if="2 === 10"></div>   //第3次判断<div v-if="3 === 10"></div>   //第4次判断<div v-if="4 === 10"></div>   //第5次判断<div v-if="5 === 10"></div>   //第6次判断<div v-if="6 === 10"></div>   //第7次判断<div v-if="7 === 10"></div>   //第8次判断<div v-if="8 === 10"></div>   //第9次判断<div v-if="9 === 10"></div>   //第10次判断</div>
</template><script>
export default {name: "IndexCom",data() {return {list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],};},
};
</script><style scoped>
</style>

以上面这组list为例子。我们会发现。循环了10次的数据,每一次,都需要进行v-if的判断。循环10次,判断10次,如果需要循环1000次呢,那也需要判断1000次。而v-if的判断相对的比较耗费性能。大量的判断会极大的降低项目质量。

优化的几种方法

方法一

在v-if不依赖v-for的前提下,我们可以将v-if写在v-for的外层,这样就可以让v-if判断优先

还是以上面的代码片段为例子↓

<template><div class="hello"><!-- v-if写在v-for的外层 这样就可以让v-if的优先级大于v-for,就不用去判断很多次 --><div  v-if="x === 1">   、<div  v-for="(item) in list" :key="item" ></div></div></div>
</template><script>
export default {name: "IndexCom",data(){return {list:[1,2,3,4,5,6,7,8,9,10]}}
};
</script><style scoped>
</style>

方法二

当v-if的判断条件依赖于v-for的某个值时(item,index),我们则可以使用如下方法

<template><div class="hello"><!-- 2. 然后这里去循环已经被过滤的属性 --><div  v-for="(item) in ListArr" :key="item" ></div></div>
</template><script>
export default {name: "IndexCom",data(){return {list:[1,2,3,4,5,6,7,8,9,10]}},computed:{//1. 在computed里先做好判断,这里过滤的成本远比v-if的成本低ListArr(){return this.list.filter((_,index) => index === 1)}}
};
</script><style scoped>
</style>

总结

  1. v-if不能和v-for一起使用的原因是v-for的优先级比v-if高,一起使用会造成性能浪费
    解决方案有两种,把v-if放在v-for的外层或者把需要v-for的属性先从计算属性中过滤一次
  2. v-if和v-for的优先级问题在vue3中不需要考虑,vue3更新了v-if和v-for的优先级,使v-if的优先级高于v-for

深度解析为什么v-if和v-for不能同时使用相关推荐

  1. 深度解析HashMap高频面试及底层实现架构!

    深度解析HashMap高频面试及底层实现架构! HashMap高频面试题 1,Map接口和List接口是什么关系? 2.Map有哪些常用的实现类? 3.请阐述HashMap的put过程? 4.链表中是 ...

  2. 语言中拟合函数 计算aic_Go语言函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...

  3. 语音视频社交背后技术深度解析

    演讲 / 蒋宁波 整理 / LiveVideoStack 伴随智能硬件设备快速发展和网络条件提升,实时语音视频的应用越来越广泛,从互动直播.到休闲游戏.再到陌生人社交,而如何保障实时互动过程流畅不卡顿 ...

  4. go float64 转int_深挖Go函数之深度解析(下):可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 这次给大家带来了一个函数的特性[可变参数],作为函数专题的结束. 有没有发现? 我们有时 ...

  5. sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 五一放假期间,我懂得,估计你们都不想学习. 小熊这两天因为个人种种令人难受的原因,没有能 ...

  6. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  7. 深度解析HashMap底层实现架构

    摘要:分析Map接口的详细使用以及HashMap的底层是如何实现的? 本文分享自华为云社区<[图文并茂]深度解析HashMap高频面试及底层实现结构![奔跑吧!JAVA]>,原文作者:灰小 ...

  8. yolov3损失函数改进_YOLO V3 深度解析 (下)

    1. 前言 距离上次YOLO V3深度解析(上) ,隔了很久了,其实自己忙着自己的论文+专利+学习任务,在写文章这块也是有点懈怠了,但是事儿不能做一半就结束了(也有小伙伴催更了),所以接着对YOLO ...

  9. ConcurrentHashMap源码深度解析(一)(java8)——不可不知的基本概念(助你拿下源码事半功倍)

    文章目录 一.前言 二.基本定义 1.基本常量 2.基本属性 三.构造器优化 1.ConcurrentHashMap(int initialCapacity, float loadFactor, in ...

  10. 深度解析ConcurrentHashMap

    深度解析ConcurrentHashMap   前言   HashMap是平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,执行get方法有可能会引起循环遍历(前提是其它线 ...

最新文章

  1. bind函数怎么用JAVA_c++bind函数的用法
  2. ASP.NET控件Web CAD SDK发布v12版本,支持DWG 2018丨附下载
  3. 《代码的未来》读书笔记:内存管理与GC那点事儿
  4. 3. vi 简介(3)
  5. t3软件怎么生成报表_用友T3怎么生成财务报表-
  6. js引入kindeditor富文本编辑器的使用
  7. ThinkPadnbsp;E40nbsp;硬盘异响…
  8. 利用R语言ggplot2包制作金字塔图,展示人口结构数据
  9. 别再用PS啦!用Excel轻松实现更换证件照背景颜色!
  10. 单招学计算机好学吗,单招没被录取学什么,计算机行业
  11. 关于WinForm中Pannel的定位问题 May 18th, 2010
  12. 李彦宏:有人弄死其他对手 自己也没好结果
  13. 金蝶系统更换服务器怎么操作系统,换主机金蝶服务器怎么安装
  14. SQL server 2000服务MSSQLSERVER无法启动解决办法
  15. 电脑捕捉android 屏幕,Android屏幕捕捉
  16. 边玩游戏边学php,HTML5边玩边学(1)画布实现方法
  17. 3. 什么是JSR参考实现? - JavaEE基础系列
  18. java使用fastdfs_使用fastdfs-client-java对fastdfs进行操作
  19. 给丢失maker的脑电数据添加marker
  20. 【撷英采华】2020年6月-7月教学周期学员考试

热门文章

  1. MSTAR数据的处理
  2. OpenJudge-2152:Pots
  3. 22春天津大学《环境保护与可持续发展》在线作业一
  4. 微信视频号信用分是什么?一起来解读一下吧
  5. 梯形图顺序控制设计法
  6. 打开谷歌浏览器弹出hao123(俗称被绑架)(SB-hao123)
  7. DEM的分析相关操作
  8. 前端vue最新vue-i18n国际化插件实现语言切换(带源码)
  9. 喵喵机打印机各系列通过USB数据线连接电脑打印
  10. Linux locate 作用,linux中的locate命令的详细解释