Vue中的v-if和v-for实例分析
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"Vue中的v-if和v-for实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue中的v-if和v-for实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
互联网科技产业
鸠鸠互联网科技
互联网中国科技
科技互联网技术
金融科技创新监管互联网金融
中国互联网科技发展
迪茉互联网科技
智慧科技互联网
奇士达互联网科技
互联网 科技服务平台
居家互联网科技有限公司
湖南洣水互联网科技有限公司扣款
全球顶尖互联网科技公司
黑科技闪耀互联网之光
厦门千工互联网科技有限公司
互联网科技圈年度人物
互联网第三次科技革命特征
互联网科技企业商标注意事项
科技互联网企业在行动
互联网科技产业
互联网 科技创业
融势互联网科技
哈尔滨新华互联网科技
须眉科技是互联网公司吗
宁夏众和广鑫互联网科技有限公司
湖南一路畅行互联网科技
宁波跨境商互联网科技有限公司
吉林省码上互联网科技电话
亚光科技低轨卫星互联网