当前位置: 首页 > Web前端 > vue.js

vue3中轻松实现switch功能组件《通俗易懂》

时间:2023-03-31 23:38:08 vue.js

在编程语言中,除了使用if语句进行条件判断外,还有一种常用的switch。在vue中,官方已经帮我们实现了v-if指令,但是还没有switch,我们自己实现一个好吗?本文就是针对这个问题进行探讨,最终实现一个Switch组件。让我们从结尾开始。让我们来看看我们希望用户如何使用Switch。对比js:用户可以使用一个VSwitch组件,通过case来应用switch函数来判断匹配条件,然后每个case匹配条件用一个模板来表示,这样我们就指定了用户应该如何使用,以及休息实际上是实施。这一步背后的思路是确定组件的规格,也可以说是如何确定组件的使用接口?那么我们应该如何实施呢?我们先来考虑switch的功能拆分。switch函数应该显示在一个等于case值的模板中,其他什么都不应该显示。例如:当case="xiaohong"时,则只能显示名称为"xiaohong"的插件。如果插槽不匹配任何大小写并且存在默认插槽,则会显示默认插槽。当然,开关还有更复杂的功能。这里先从核心功能开始,逐步复杂化(迭代思考)实现原理首先我们要先知道组件的槽位,在vue3中,我们只需要通过以下方式轻松获取槽位即可:setup(props,{slots}){console.log(slots)}copycodeifprint对于slots,你会发现可以得到一个对象,key的值为slot的名字,value为a函数,调用该函数可以得到对应的vnode。那么,比如我要显示插槽小黑怎么办?只需要做这个setup(props,{slots}){return()=>{returnslots.xiaohei()};},复制代码设置除了返回一个对象作为导出到模板的数据,还可以直接返回一个函数作为render。只要render函数返回对应的vnode,最终就会渲染到view上。所以按照上面代码的写法,最终还是会显示出小黑槽内部的内容。了解了以上知识点后,我们再回过头来看看第一个函数是不是只要渲染出符合case的slot就可以了:exportdefault{props:["case"],setup(props,{slots}){console.log(插槽);return()=>{if(slots[props.case]){returnslots[props.case]();}};},};复制代码注意,一定要加条件判断,因为很有可能没有对应的slot。了解原理后,是不是很容易实现第一个功能呢?我们再看第二个函数是不是很简单?只需添加一段代码:exportdefault{props:["case"],setup(props,{slots}){console.log(slots);return()=>{if(slots[props.case]){returnslots[props.case]();}}if(slots["default"]){returnslots["default"]();}};},};如果复制代码不符合第一个条件,肯定会到达第二个条件判断,也就是if(slots["default"])然后如果有default槽,那么就可以回到这个点,你实现了一个简单的Switch功能组件。小结下面总结一下你学到了哪些知识点。在设计组件时,首先要设计组件的规则(接口)。小,接下来再一一分解vue3中获取slot的方式。setup不仅可以返回一个对象,还可以返回一个函数,和render函数的效果是一样的。渲染函数返回的vnode最终会渲染到视图上。如果你学会了,请给你的小手点个赞~~~完整代码//VSwitch.vue扩展思考其实这里实现的switch功能并不完整。如果用户匹配满足多个条件怎么办?而且没有break,那我们是不是应该把匹配到的模板都显示出来呢??作者:春去春来