用途
shadcn/ui 是一套用于构建用户界面的组件库开发规范,面向使用 Tailwind CSS 与 Radix UI 原语的 React 项目。它提供组件使用的最佳实践,帮助开发者在项目中以一致、可维护的方式搭建界面。
主要能力
- 复制而非安装:组件被复制到你的项目中,而不是作为依赖安装,因此可以直接在代码库中修改。
- 可定制:组件位于你的代码库内,可自由编辑,例如通过 cva 添加自定义变体。
- 可访问:基于 Radix UI 原语构建,支持 ARIA。
- 类型安全:完整的 TypeScript 支持。
- 可组合:由简单原语组合出复杂 UI。
文档覆盖的组件类别包括:按钮与卡片、对话框、表单(配合 react-hook-form 与 zod)、选择字段、表格、徽章与下拉菜单、标签页、Toast、Alert、骨架屏等加载状态。
使用方式
初始设置:
npx shadcn@latest init
添加单个组件:
npx shadcn@latest add button
npx shadcn@latest add form
npx shadcn@latest add dialog
添加多个组件:
npx shadcn@latest add button card dialog
若 npx shadcn@latest add 出现 npm 缓存错误(如 ENOTEMPTY 或 syscall rename),文档给出几种方案:清理 npm 缓存(npm cache clean --force)、改用 pnpm(推荐,pnpm dlx shadcn@latest add table)、改用 yarn(yarn dlx shadcn@latest add table),或访问 shadcn/ui 文档手动复制组件代码到项目中。
组件使用示例包括:
- 按钮变体:
<Button variant="destructive">、<Button variant="outline">等。 - 卡片:由 Card、CardHeader、CardTitle、CardDescription、CardContent 组合。
- 对话框:Dialog、DialogTrigger、DialogContent、DialogHeader、DialogTitle、DialogDescription 组合。
- 表单:使用 react-hook-form 与 zod 校验,配合 Form、FormField、FormItem、FormLabel、FormControl、FormMessage 等。
- 表格:Table、TableHeader、TableBody、TableRow、TableHead、TableCell 组合。
- 导航:DropdownMenu 系列组件、Tabs 系列组件。
- 反馈:useToast 的 toast 方法、Alert 组件。
- 加载状态:Skeleton 组件。
定制与主题
组件位于代码库中,可直接编辑,例如在 components/ui/button.tsx 中通过 cva 添加自定义变体(如 brand)。主题使用 OKLCH 格式的 CSS 变量,在 app/globals.css 的 :root 与 .dark 中定义 --background、--foreground、--primary 等变量。暗色模式可通过 next-themes 的 useTheme 实现切换组件。
组合模式
文档展示将组件组合使用的方式,例如在 Card 中嵌入表单并在 CardFooter 放置操作按钮,或在 Dialog 中嵌入表单并通过状态控制开关。
适用场景
适用于使用 React、Tailwind CSS 与 Radix UI 构建前端界面的项目,尤其是需要高度定制组件外观与行为、重视可访问性与类型安全的场景。
限制
资料未提供关于收费、价格、平台支持范围、性能效果等方面的信息,暂未提供。