You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
exportfunctiongenElement(el: ASTElement,state: CodegenState): string{if(el.parent){el.pre=el.pre||el.parent.pre}if(el.staticRoot&&!el.staticProcessed){returngenStatic(el,state)}elseif(el.once&&!el.onceProcessed){returngenOnce(el,state)}elseif(el.for&&!el.forProcessed){returngenFor(el,state)}elseif(el.if&&!el.ifProcessed){returngenIf(el,state)}elseif(el.tag==='template'&&!el.slotTarget&&!state.pre){returngenChildren(el,state)||'void 0'}elseif(el.tag==='slot'){returngenSlot(el,state)}else{// component or element
...
}
面试官: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
创建
vue
实例,存放isShow
与items
数据模板指令的代码都会生成在
render
函数中,通过app.$options.render
就能得到渲染函数_l
是vue
的列表渲染函数,函数内部都会进行一次if
判断初步得到结论:
v-for
优先级是比v-if
高再将
v-for
与v-if
置于不同标签再输出下
render
函数这时候我们可以看到,
v-for
与v-if
作用在不同标签时候,是先进行判断,再进行列表的渲染我们再在查看下
vue
源码源码位置:
\vue-dev\src\compiler\codegen\index.js
在进行
if
判断的时候,v-for
是比v-if
先进行判断最终结论:
v-for
优先级比v-if
高三、注意事项
v-if
和v-for
同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)template
(页面渲染不生成dom
节点),在这一层进行v-if判断,然后在内部进行v-for循环computed
提前过滤掉那些不需要显示的项The text was updated successfully, but these errors were encountered: