v-show 和 v-if 都是 Vue 中用于条件性显示元素的指令,但它们有着本质的区别:
渲染机制不同
v-f 是“真正的"条件渲染,它会确保条件块内的事件监听器和子组件在切换时被销毁和重建,当条件为 false 时,元素及其所有子元素会被完全移除出 DOM树.
v-show 则简单得多,不管初始条件如何,元素总是会被渲染,并且保留在 DOM树 中。
v-show 只是简单地切换元素的 Css display 属性显示隐藏。
初始渲染开销不同
v-if 是惰性的:如果初始条件为 false,则什么也不做;
只有当条件首次变为 true 时,才会渲染条件块。
v-show 则不管初始条件是什么,元素总是会被渲染,所以有更高的初始渲染开销。
切换开销不同
v-if 在切换时有较高的开销,因为它会完全销毁和重建条件块内的 DOM 元素和组件实例。
v-show 的切换开销较小,只是切换 CSS display 属性,DOM 元素始终保留
功能支持不同
v-if 支持 v-else 和 v-else-if 分支,可以在 template 元素上使用。
v-show 不支持 v-else,也不能在 template 元素上使用。
从性能角度考虑:
如果元素可能频繁切换,使用 v-show 更好,避免不断地创建和销毁 DOM树。如果条件很少变化,使用 v-if 更好,可以避免初始渲染不需要的元素。对于大型组件或组件树,v-if 可能更有优势,因为它可以完全避免不必要的组件实例化
