React UI组件库的选择
前言
主要对比 Antd, ChakraUI, Shadcn 三个主流组件库的区别, 以及他们的优缺点。
选择的原则
首先技术永远是为产品服务的。我们要根据开发的内容来选择技术。
对产品技术的认知:
- 应用的类型,是前台展示型,还是后台应用
- 重视组件功能性,还是重视组件的美观度和可定制性的
- 是否需要自适应, 是否需要兼容移动端
- 有无设计规范, 是否有设计师参与
- 开发的灵活性, 是否需要自定义组件
对组件库的要求
- 完整的设计规范
- 组件库的丰富程度,数量
- 样式的自定义程度
- 开发的灵活性
设计规范
- Antd: 传统风格, 适合企业后台管理系统
- ChakraUI: 提供了 Figma 设计文件
- Shadcn: 也提供了 Figma 设计文件
组件数量
Antd > Chakra UI > Shadcn
开发的灵活性
- Antd: 组件只支持固定 Props
- Chakra UI: 组件底层都是 chakra 的原子组件,都支持 style props, 很多组件封装,其实就是不同的 Box 组件预设了样式。
- shadcn: 组件库是在本地的,又是基于 tailwindcss 的, 非常灵活
服务端渲染支持
- Antd 支持, 但是麻烦 服务端渲染 - Ant Design
- Chakra 不支持
- shadcn 支持
主题定制
- Antd: v5 也提供了更加灵活的方案: 定制主题 - Ant Design
- Chakra UI: 提供类似 tailwindcss 的方式,扩展 theme
- shadcn: 就是基于 tailwindcss 的, 可以直接修改 tailwindcss 的配置文件
技术总结
- 快速验证,迭代项目, 选择 Antd, 组件多。结合其他 headless UI 的时候,样式不太好写。
- shadcn 是基于 RadixUI, 使用 tailwindcss 封装的组件库, 适用范围最广,组件数量少, 方便结合其他 headless UI 组件
- ChakraUI ,是自己一套原子组件,配合 emotion 提供样式, 写法上更加灵活, 组件数量也中等,只是暂不支持 SSR。结合其他 headless UI 的时候,样式不太好写。
- 其他组件, 最近 tailwind 官方也推出了个类似 shadcn 的组件库, Introducing Catalyst: A modern UI kit for React - Tailwind CSS, 保持关注吧。