Vue中的v-if和v-for实例分析
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本文小编为大家详细介绍"Vue中的v-if和v-for实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中的v-if和v-for实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年11月08日Vue中的v-if和v-for实例分析 {{ item.label }}
本文小编为大家详细介绍"Vue中的v-if和v-for实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中的v-if和v-for实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、作用
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染
v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组或者对象,而 item 则是被迭代的数组元素的别名
在 v-for 的时候,建议设置key值,并且保证每个key值是独一无二的,这便于diff算法进行优化
两者在用法上
二、优先级
v-if 与 v-for 都是 vue 模板系统中的指令
在vue模板编译的时候,会将指令系统转化成可执行的render函数
示例 编写一个 p 标签,同时使用 v-if 与 v-for
{{ item.title }}
创建 vue 实例,存放 isShow 与 items 数据
const app = new Vue({ el: "#app", data() { return { items: [ { title: "foo" }, { title: "baz" }] } }, computed: { isShow() { return this.items && this.items.length > 0 } }})模板指令的代码都会生成在 render 函数中,通过 app.$options.render 就能得到渲染函数
ƒ anonymous() { with (this) { return _c('div', { attrs: { "id": "app" } }, _l((items), function (item) { return (isShow) ? _c('p', [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) }}_l 是 vue 的列表渲染函数,函数内部都会进行一次 if 判断
初步得到结论:v-for 优先级是比 v-if 高
再将 v-for 与 v-if 置于不同标签
{{item.title}}
再输出下 render 函数
ƒ anonymous() { with(this){return _c('div',{attrs:{"id":"app"}}, [(isShow)?[_v("\n"), _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)}}这时候我们可以看到,v-for 与 v-if 作用在不同标签时候,是先进行判断,再进行列表的渲染
我们再在查看下 vue 源码
源码位置:\vue-dev\src\compiler\codegen\index.js
export function genElement (el: ASTElement, state: CodegenState): string { if (el.parent) { el.pre = el.pre || el.parent.pre } if (el.staticRoot && !el.staticProcessed) { return genStatic(el, state) } else if (el.once && !el.onceProcessed) { return genOnce(el, state) } else if (el.for && !el.forProcessed) { return genFor(el, state) } else if (el.if && !el.ifProcessed) { return genIf(el, state) } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { return genChildren(el, state) || 'void 0' } else if (el.tag === 'slot') { return genSlot(el, state) } else { // component or element ...}在进行if判断的时候,v-for 是比 v-if 先进行判断
最终结论:v-for 优先级比 v-if 高
三、注意事项
1.永远不要把 v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)
2.如果避免出现这种情况,则在外层嵌套template(页面渲染不生成dom节点),在这一层进行v-if判断,然后在内部进行v-for循环
3.如果条件出现在循环内部,可通过计算属性 computed 提前过滤掉那些不需要显示的项
computed: {//过滤出满足条件后的数据再渲染 items: function() { return this.list.filter(function (item) { return item.isShow }) }}读到这里,这篇"Vue中的v-if和v-for实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
指令
函数
时候
实例
内容
条件
实例分析
分析
优先级
数据
数组
文章
标签
模板
循环
不同
作用
元素
同时
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
成都稠密网络技术有限公司
网络技术推广包括什么软件
用服务器ip当网站域名
安徽数字多媒体软件开发
数据库系统依靠
我的世界天骐服务器小游戏
数据库十二个变量
Python 巡检服务器脚本
服务器没过安全检查
微软数据库官方说明
前景软件开发有前途吗
dnf服务器不同号邮件能收到吗
Qt软件开发技术超星
读取数据库表中数据php
通信网络安全保护系列标准
江西工业控制上位机软件开发
柳职计算机网络技术怎么样
王者荣耀服务器端
linux配置dns服务器邮件
表格里面中如何匹配数据库
武汉大学软件开发团队
网络技术推广包括什么软件
成都返空汇网络技术公司
移动网络技术面试
bim数据库投资方案
服务器能换台式机电源吗
apex猎杀是每个服务器
空中比特币俱乐部服务器安全
数据库外模式可以有几种
计算机网络安全漏洞扫描