vue中的slot和v-show和v-if有什么区别?可以互相替代吗?
我理解 slot 和 v-if 虽然有时候可以实现类似的功能,但这两个在组件设计上的理念上是完全不一样的。
虽然用 v-if 和 v-show 理论上也能实现一个弹窗组件,无非就是在弹窗增加场景时在内部不断增加判断,但这样的话这个组件就与业务耦合太严重,而且很难维护。
不能互相替代,但是可能在视觉上你觉得是一样的效果。
v-show是使用css的display属性来打到切换一个元素显示的效果,v-if是控制dom节点是否在html文档上来达到该效果的。
理论上来说,如果一个元素频繁切换显示,最好使用v-show。
v-if可以让你严格根据某些数据来控制页面上节点的渲染,比如根据某个类型来渲染某个组件(你不可能需要全部组件的创建以及他们的切换)
v-if
是控制dom节点,v-show
是通过display:none
来控制显示与否,在dom树上依然存在。
至于slot和上面两者的区别就大了去了,比如你在A组件里有一个slot
插槽,你在这个插槽里放B组件,放C组件,放D组件,可以不放组件,显然这是v-if
、v-show
做不到的(除非写一大串的条件)。
建议你仔细阅读官方文档,你提出的问题,文档里其实都有说明。
不可以相互替代。
v-show是dom元素已经渲染出来了,只是有没有展示出来,v-if是能控制dom元素是否渲染。
v-if有更高的切换消耗。v-show有更高的初始渲染消耗。
v-if适合运行时条件很少改变时使用。v-show适合频繁切换。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
v-if
表示这个节点可能不存在,v-show
表示这个节点可能不显示,当然不能互相替代。