无意中发现 Vue3 的小技巧,帮我节省很多代码

无意中发现 Vue3 的小技巧,帮我节省很多代码

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~

最近在开发 Vue3 项目时偶然发现了一个技巧:组件的事件往下传可以进行叠加!,感觉对大家的开发肯定有帮助,能节省很多代码量!!!我会通过一个小案例来跟大家讲解这个小技巧的好处体现在哪~

场景

先来说说我的场景吧,我在项目开发中对一个基础组件 BasicComp.vue进行二次封装,总共封装了两层,如下图

f98e2491a1262ea5c7d403a392610fed.png

我先把 BasicComp.vue 简单化一下:

e649b43772f831a2487fec8e6b1e0f4a.png


而我想要做的效果是在 Page.vue、Index.vue中都能调用BasicComp.vue身上的方法changeShow去控制show变量的改变,比如下面的效果

102a2662ee1f6b41a98028ba0f1954f5.gif


实现代码如下:

SecondComp.vue

316c8c9fa91170b7488eca0cc4aac83d.png


Index.vue

26fce15c0e5c869a09374441b5cb4262.png


Page.vue

667f1c38cd2aa42394cd31ceb0666f55.png


太麻烦了!

大家也看到了,上面的代码实现非常麻烦,得一层一层利用 emits 往上传

但是突然有一天我发现了一个 Vue3 的特性,貌似很多人都没发现,那就是:组件的事件往下传可以进行叠加!

什么意思呢?我通过一个小例子来说明,我准备了 祖孙三个组件

Sunzi.vue

f053bbf0f105da756151aa2df0da263b.png


Erzi.vue

733a7662548cccfb351fcd26028926d7.png


Yeye.vue

bce31cffd08a78fec65a5ccd4af15c5b.png


最输出表现为:

e1641defbab9c24bc78dcb87060010a2.png


我在Erzi.vue 中并没有去接收 Yeye.vue 传下来的 emits,但是它却能透传到Sunzi.vue 中,并且两者叠加

代码优化

通过刚刚发现的小特性,我们可以对一开始的代码进行优化

只需要封装一个 Hooks

79c5d77b61c1cb2f7f2e505185334941.png


Index.vue

60fa4926119e5ad476d30a7e4518bc8c.png

Page.vue

68c86d9a808de396f7d38086fa4ebbb4.png

最终达到想要的结果

350014bab90f23ba84a67da2c3126f5d.gif


Vben-Admin受到的启发

Vben-Admin 是一个非常出色的开源 Vue3 项目,它代码中就大量使用了 事件叠加 的技巧,尤其是 Table、Drawer、Modal 这类可控组件,我也是从里面学到的技巧~

结语

我是林三心,感谢您的阅读~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值