v-if和v-for哪个优先级更高?
首先在实际开发阶段,不应该把v-if和v-for在同一个标签中使用,
在vue2中,v-for的优先级是高于v-if的,如果同时出现,每次渲染都会先执行循环再判断条件,无论如何循环都不可避免,浪费了性能;另外需要注意的是在vue3则完全相反,v-if的优先级高于v-for,所以v-if执行时,它调用的变量还不存在,就会导致异常。
通常有两种情况下导致我们这样做
- 为了过滤列表中的项目(比如:
v-for="user in users" v-if="user.isActive")。此时定义一个计算属性(比如:activeUsers),让其返回过滤后的列表即可(比如:users.filter(u=>u.isActive)) - 为了避免渲染本应该被隐藏的列表(比如
v-for="user in users" v-if="shouldShowUsers"),此时把v-if移至容器元素上(比如ul、ol)或者外面包一层template即可。
<div id="app">
<p v-for="child in children" v-if="isFolder">{{child.title}}</p>
</div>
<script>
const vm=new Vue({
el:'#app',
data(){
return{
children:[
{
title:'red'
},
{
title:'green'
}
]
}
},
computed:{
isFolder(){
return this.children&&this.children.length>0
}
}
})
console.log(vm.$options.render);
渲染函数如下:
ƒ anonymous(
) {
with(this){return _c('div',{attrs:{"id":"app"}},_l((children),function(child){return (isFolder)?_c('p',[_v(_s(child.title))]):_e()}))}
}
优化后代码:
<template v-if="isFolder">
<p v-for="child in children">{{child.title}}</p>
</template>
渲染函数如下:
ƒ anonymous(
) {
with(this){return _c('div',{attrs:{"id":"app"}},[(isFolder)?_l((children),function(child){return _c('p',[_v(_s(child.title))])}):_e()],2)}
}
v-if和v-for哪个优先级更高?的更多相关文章
- SAP WM TO Print Control设置里,Movement Type 的优先级更高
SAP WM TO Print Control设置里,Movement Type 的优先级更高 存储类型的配置: 从storage type GRM 搬到任何地方,都不需要打印TO单. 移动类型的配置 ...
- python——比return优先级更高的语句
调用sqlmap,使用sqlmap做二次开发的时候,出现的问题: 在调用sqlmap中return,然而主程序还是会被sqlmap中的某些代码给中断. 添加try也无法阻止中断. 后来猜测中断是由ex ...
- poj 2762 Going from u to v or from v to u?
题目描述:为了让他们的儿子变得更勇敢些,Jiajia和Wind将他们带到一个大洞穴中.洞穴中有n个房间,有一些单向的通道连接某些房间.每次,Wind选择两个房间x和y,要求他们的一个儿子从一个房间走到 ...
- 转:oracle几组重要的常见视图-v$undostat,v$open_cursor,v$rowcache,v$session_longops,v$waitstat
v$undostat 本视图监控当前实例中undo空间以及事务如何运行.并统计undo空间开销,事务开销以及实例可用的查询长度. V$UNDOSTAT中的常用列 Endtime:以10分钟为间隔的结束 ...
- 转:oracle几组重要的常见视图-v$segstat,v$segment_statistics,v$filestat,v$rollstat
v$segstat 本视图实时监控段级(segment-level)统计项,支持oracle9ir2及更高版本 V$SEGSTAT中的常用列 TS#:表空间标识 OBJ#:字典对象标识 DATAOBJ ...
- 转:oracle常见重要视图-v$sql,v$sql_plan,v$sqltext,v$sqlarea,v$sql_plan_statistcs
v$sql V$SQL中存储具体的SQL语句. 一条语句可以映射多个cursor,因为对象所指的cursor可以有不同用户(如例1).如果有多个cursor(子游标)存在,在V$SQLAREA为所有c ...
- 转:Oracle里几组重要的视图--v$sysstat,v$system_event,v$parameter v$system_parameter
按组分的几组重要的性能视图 1.System 的 over view v$sysstat , v$system_event , v$parameter,V$instance得到oracle_sid ...
- poj 2762 Going from u to v or from v to u?(强连通、缩点、拓扑)
题意:(理解错了)在一个洞穴中有多个room,要求任意选两个room:u.v,都能保证u.v之间有通路,注意洞穴中的路是有向边.. 分析:强连通子图中的点必然两两之间可以互通,两个强连通子图之间有通路 ...
- Oracle基本数据字典:v$database、v$instance、v$version、dba_objects
v$database: 视图结构: SQL> desc v$database; Name Null? Type - ...
随机推荐
- 函数 装饰器 python
今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...
- Dom基础(三):事件冒泡,事件委托(事件代理)和事件捕获
javascript中的addEventListener(事件名,回调,布尔) 其中第三个参数默认为false-事件冒泡,true为事件捕获 二者区别: 事件冒泡:目标元素事件先触发,然后父元素事件触 ...
- 【大话云原生】kubernetes灰度发布篇-从步行到坐缆车的自动化服务升级
此文系[大话云原生]系列第四篇,该系列文章期望用最通俗.简单的语言说明白云原生生态系统内的组成.架构以及应用关系.从这篇开始我们要开始针对Kubernetes进行介绍了,本文内容如下: 一.Kuber ...
- linux下redis开机自启动
将/usr/local/app/redis-4.0.8/redis.conf文件中daemonize no改为daemonize yes 在/etc目录下新建redis目录:mkdir /etc/re ...
- python学习-Day27
目录 今日内容详细 动态方法与静态方法 动态方法 绑定给对象的方法 绑定给类的方法 静态方法 继承 继承的含义 继承的目的 继承的基本使用 继承的本质 名字的查找顺序 不继承的情况下 单继承的情况下 ...
- 在MAUI中使用Masa Blazor
Masa Blazor是什么 在此之前我们已经介绍过什么是Masa Blazor,以及如何使用Masa Balzor,如果还有不了解Masa Blazor的同学可以看我上篇文章[初识Masa Blaz ...
- XCTF练习题---MISC---glance-50
XCTF练习题---MISC---glance-50 flag:TWCTF{Bliss by Charles O'Rear} 解题步骤: 1.观察题目,下载附件 2.下载完成以后,隐隐约约像是一张动图 ...
- 国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)
概述 背景 Apache Doris官方地址 https://doris.apache.org/ Apache Doris GitHub源码地址 https://github.com/apache/i ...
- 关于我学git这档子事
创建本地分支并切换到该分支 git checkout -b *** 相当于如下2个命令: git branch *** git checkout *** 推送本地开发分支到远程开发分支 git pus ...
- Kafka消息的压缩机制
最近在做 AWS cost saving 的事情,对于 Kafka 消息集群,计划通过压缩消息来减少消息存储所占空间,从而达到减少 cost 的目的.本文将结合源码从 Kafka 支持的消息压缩类型. ...