哆哆女性网车牌号吉凶savagelands秦子越华福证券官网男生空间素材大图c0930百客鞋店起名字大全给孩子起名字有什么讲究吗桥姓起名今夜星辰似你免费阅读易会满范刘怎么起名字机械化公司起名怎么起名字犄角给棋牌室起什么名字好想给新生儿起个乳名免费起的名字吗取名男看诗经女女孩楚辞起名我在他乡挺好的演员表百世快运物流查单号码起名 风水韩姓起名韩姓男宝宝起名给姓罗的宝宝取名起名大全韩姓起名韩姓宝宝起名金信网崔姓起名大全男孩勇者指令枕上婚宠淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”
面试官:v-show和v-if有什么区别?使用场景分别是什么?
一、v-show与v-if的共同点
我们都知道在
vue
中v-show
与v-if
的作用效果是相同的(不含v-else),都能控制元素在页面是否显示在用法上也是相同的
true
的时候,都会占据页面的位置false
时,都不会占据页面位置二、v-show与v-if的区别
控制手段:
v-show
隐藏则是为该元素添加css--display:none
,dom
元素依旧还在。v-if
显示隐藏是将dom
元素整个添加或删除编译过程:
v-if
切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show
只是简单的基于css切换编译条件:
v-if
是真正的条件渲染,它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。只有渲染条件为假时,并不做操作,直到为真才渲染v-show
由false
变为true
的时候不会触发组件的生命周期v-if
由false
变为true
的时候,触发组件的beforeCreate
、create
、beforeMount
、mounted
钩子,由true
变为false
的时候触发组件的beforeDestory
、destoryed
方法性能消耗:
v-if
有更高的切换消耗;v-show
有更高的初始渲染消耗;三、v-show与v-if原理分析
具体解析流程这里不展开讲,大致流程如下
template
转为ast
结构的JS
对象ast
得到的JS
对象拼装render
和staticRenderFns
函数render
和staticRenderFns
函数被调用后生成虚拟VNODE
节点,该节点包含创建DOM
节点所需信息vm.patch
函数通过虚拟DOM
算法利用VNODE
节点创建真实DOM
节点v-show原理
不管初始条件是什么,元素总是会被渲染
我们看一下在
vue
中是如何实现的代码很好理解,有
transition
就执行transition
,没有就直接设置display
属性v-if原理
v-if
在实现上比v-show
要复杂的多,因为还有else
else-if
等条件需要处理,这里我们也只摘抄源码中处理v-if
的一小部分返回一个
node
节点,render
函数通过表达式的值来决定是否生成DOM
四、v-show与v-if的使用场景
v-if
与v-show
都能控制dom
元素在页面的显示v-if
相比v-show
开销更大的(直接操作dom
节点增加与删除)如果需要非常频繁地切换,则使用 v-show 较好
如果在运行时条件很少改变,则使用 v-if 较好
参考文献
The text was updated successfully, but these errors were encountered: