0%

shadcn-ui 组件库

忘记之前在哪看到,说欧美市场现在普遍流行的组件库方案不是 AntD,也不是 mui,而是 shadcn-ui ,没听说过这个之前,最近碰巧看到 Solid-ui ,是一个非官方的 shadcn-ui 的 SolidJS 版本实现,就对其本体也很感兴趣,打开看了觉得有点意思。

官网地址:https://ui.shadcn.com/
组件库本身的设计感觉中规中矩,看起来并不比 antd 优秀。

shadcn-ui组件库demo

那为什么会成为在欧美市场非常受欢迎的组件库?

从介绍文档好像找到了答案,它选了一条和传统 UI 组件库都不同的路。

shadcn-ui组件库介绍

简单翻译下:
这不是一个组件库,是一堆可复用组件的集合,你可以把它们复制粘贴到你的项目里去。

有意思,一个组件库,上来先说自己不是一个组件库。

底下也迅速解释了,这东西不能作为依赖被安装,它并没有通过 npm 进行分发。你可以选择你需要的组件,复制到你的项目里,好了,现在这是你的代码了。然后你就可以基于这些去构建你自己的组件库了。

这不就是“复制优于复用”的思路吗?

大部分时候,我们写代码,会追求复用,小到常量,大到方法和页面。复用的好处很明显,编写的代码量更少,工作更轻松;当你需要修改一些东西时,只需要改一处,不必担心改漏。
但复用始终是最好的吗?并不是。

当一个组件被几个地方引用,都是你熟悉、清楚的地方,改一次所有生效,非常完美。
但当你的工程非常大之后,甚至是好几个项目,数十甚至上百次引用同一个组件,这时候你还敢随意修改这个组件吗?一定会非常小心翼翼,谨慎地去修改,甚至有些 bug 无法修复,只能当 feature 始终保留。
如果不是靠引用去复用组件而是直接拷贝的呢?显然负担会低很多,哪里错了改哪里。

现在再想想 AntD 和 shadcn-ui,AntD 好不好?很好。
但你有空关心 AntD 的每一次发布更新迭代吗?你知道它的维护者们到底是在修 bug 还是在加一些新功能吗?
它修了它认为的 bug,结果把你的功能搞挂了,算谁的……?更别提大版本更新,一堆不兼容的问题。

shadcn-ui 完全没有上述问题,代码进你的项目了,是你的了。你只要不改它,它不会给你任何惊喜,但也不会给你任何惊吓。

下次做个人的小项目,我估计也会坚决投入 shadcn-ui 的阵营。
但是公司的项目,以 npm 为核心的组件库还是有很多价值的,也许 AntD 会有一些问题,但围绕团队建设贴合业务的小组件库是有必要的。复用能保证同一个坑,一个团队不用踩 10 遍,至于复用的问题,小团队内部高效频繁的沟通能尽可能减少其影响。

最后还有个小问题,shadcn-ui 怎么更新啊?不用 npm 分发的话,代码的更新也需要手工拷贝合并代码?那已经变更的部分怎么办?我看 github 上也有这个 issue,并没有解决。这可能是复制方案无法规避的问题。