Vue 中的 v-if 和 v-show 有什么区别?分别在什么场景使用?

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 可能更有优势,因为它可以完全避免不必要的组件实例化

原文链接:,转发请注明来源!