问题起因:
在写vue代码时发现使用v-if 和 v-show 进行模块渲染的时候,二者加载的速度不一样,v-if有一种过渡的感觉,v-show就是直接切换的感觉,百度了一些二者的区别
- v-show 只是简单的控制元素的 display 属性,而 v-if 才是条件渲染(条件为真,元素将会被渲染,条件为假,元素会被销毁);
- v-show的元素始终会被渲染并保存在DOM中,v-show只是简单的切换元素的CSS属性display。
而v-if是真正的条件渲染,因为它会确保切换过程中条件块内的时间监听和子组件适当地被销毁和重建。(问题原因) - v-show 首次渲染开销比较大,而 v-if 的首次渲染开销要小的多;
- v-if 切换开销较大,v-show 切换开销小;
- v-if 可以在 template 使用,而 v-show 不行
总结:v-if有更高的切换开销,而v-show有更高的初始化渲染开销。因此如果要非常的频繁切换,则使用v-show。如果在运行的时候很少改变,则使用v-if较好。