频繁切换 就用v-show
v

一、需求

需求是同一个组件要使用两次,为了使得它们的数据互不污染,

二、简单实现

一般是可以import两次。

const qwq1 = () => import("@/xxx.vue")

const qwq2 = () => import("@/xxx.vue")

使用的时候,再用不同的名字使用可以防止互相污染。

注意

el-tabs的原理也是这样的。
简单的依赖传进去的值而变更是不可行的!!!数据会被污染!!!!

三、遇到问题

本来是v-if,后面组件渐渐多了起来,想换成v-show,没想到出问题了!
用上面那种形式,不会加载

官网文档

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

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

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

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

得出结论:

1 v-if有销毁重建
2 上面提到的使用场景 实际上用v-if没有关系**,因为条件true的时候才开始渲染,如果不点击,只是放了很多个v-if的话 (不切换),是没有什么关系的(因为都没有渲染啊啊啊啊啊)**
3 v-show在频繁切换的条件下好,原理是因为【切换的时候没有销毁重建,只是切换了css】
但是也有个问题,因为换的是css,所有最开始都直接加载了,然后只换css,就会出现上面的问题。

四、remember

v-if 是惰性销毁重建,v-show’是预先加载然后切换css
注意, v-show 有更高的初始渲染开销

Logo

前往低代码交流专区

更多推荐