v-if与v-show的区别与选择

Posted katydids

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了v-if与v-show的区别与选择相关的知识,希望对你有一定的参考价值。

 

v-if与v-show的区别与选择

 

官网给的区别

 

v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

 

v-if也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

 

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

 

一般来说,v-if有更高的切换开销,而 v-show 有更高的初始渲染开销。

 

因此,如果需要非常频繁地切换,则使用 v-show  较好;如果在运行时条件很少改变,则使用 v-if 较好。

 

 

总的来说,

v-if是真正的条件判断,条件为真时子组件才会被调用执行 ,而条件不为真时就会一直不被调用执行,

而v-show是已经被调用执行只是没显示出来,类似于css效果

 

从他两者的区别也可以看出

 

假设我当前的子组件需要被频繁的调用,还是使用v-show比较好,因为这样只是相当于css样式的转换,用户体验好

 

当运行时,如果在运行时条件很少改变,则使用 v-if 较好

 

 

 

还有一件特别恶心的事,在使用better-scroll的时候,如果在v-if 标签上使用better-scroll

会报一个这样的错

[BScroll warn]: Can not resolve the wrapper DOM. Vue better-scroll
[Vue warn]: Error in mounted hook: “TypeError: Cannot read property ‘children’ of undefined”

 

明明已经了DOM节点,为什么还会报错呢????


出错的原因很简单------------------------------>


问题就出在v-if这里,将v-if改为v-show就行了,v-show会渲染它,但是不显示。或者将v-if 里再包一层div 将绑定的元素改为这个新加的div

 





以上是关于v-if与v-show的区别与选择的主要内容,如果未能解决你的问题,请参考以下文章

v-if与v-show的区别

v-if与v-show区别

vue中v-show与v-if的区别

v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例

Vue学习之v-if与v-show的区别

vue中v-show与v-if的区别