当前位置: 首页 > news >正文

react之shadcn(二)

shadcn/ui 的使用流程与传统组件库(如 Ant Design 或 Material UI)完全不同。它不是通过import { Button } from 'shadcn-ui'来使用的,而是将组件的源代码直接复制到你自己的项目中

以下是 shadcn/ui 的具体使用实现步骤,以React + Next.js + Tailwind CSS为例:

第一步:环境准备

在使用之前,你的项目必须满足以下前提条件:

  1. 框架:React (推荐 Next.js) 或 Vue (实验性支持)。
  2. 样式库:必须安装并配置好Tailwind CSS
  3. 构建工具:Vite, Next.js, Remix 等。
  4. TypeScript(强烈推荐,虽然支持 JS,但官方主要维护 TS 版本)。

第二步:初始化 (Initialization)

在你的项目根目录下,运行官方 CLI 工具进行初始化。这会创建一个配置文件components.json,并设置好路径别名和基础样式变量。

npx shadcn@latest init

运行过程中你会看到交互式提示:

  • Style: 选择默认风格(Default)或纽约风格(New York)。
  • Base Color: 选择主色调(如 Slate, Gray, Zinc 等)。
  • CSS Variables: 确认是否使用 CSS 变量来管理主题颜色(推荐 Yes)。
  • Components Path: 确认组件存放路径(默认为@/components)。

执行后发生了什么?

  1. 生成了components.json配置文件。
  2. app/globals.css(Next.js) 或index.css中注入了大量的 CSS 变量(用于定义颜色、半径等主题系统)。
  3. 安装了必要的依赖(主要是class-variance-authority,clsx,tailwind-merge,lucide-react等工具库,以及底层的radix-ui组件)。

第三步:添加组件 (Adding Components)

这是核心步骤。你不需要安装组件包,而是“拉取”代码。

命令格式:

npx shadcn@latest add <组件名>

示例:添加一个按钮 (Button) 和一个对话框 (Dialog)

npx shadcn@latest add button dialog

执行后发生了什么?
CLI 会自动下载这些组件的源代码文件,并放置在你配置的目录中(通常是components/ui/)。
你的项目结构会变成这样:

src/ ├── components/ │ └── ui/ │ ├── button.tsx <-- 代码直接在这里,你可以随意修改! │ ├── dialog.tsx <-- 代码直接在这里 │ └── ... ├── lib/ │ └── utils.ts <-- 提供 cn() 函数,用于合并类名

第四步:在代码中使用 (Usage)

现在,这些组件就是你本地普通的 React 组件了。你可以像导入自己写的组件一样导入它们。

示例代码 (page.tsxApp.tsx):

import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; // 假设你也添加了 input export default function Demo() { return ( <Dialog> <DialogTrigger asChild> <Button variant="outline">打开设置</Button> </DialogTrigger> <DialogContent className="sm:max-w-[425px]"> <DialogHeader> <DialogTitle>编辑个人资料</DialogTitle> <DialogDescription> 在这里修改你的个人信息。点击保存后生效。 </DialogDescription> </DialogHeader> <div className="grid gap-4 py-4"> <div className="grid grid-cols-4 items-center gap-4"> <label htmlFor="name" className="text-right">用户名</label> <Input id="name" defaultValue="Pedro Duarte" className="col-span-3" /> </div> </div> <DialogFooter> <Button type="submit">保存更改</Button> </DialogFooter> </DialogContent> </Dialog> ); }

第五步:定制与修改 (Customization)

这是 shadcn 最强大的地方。因为代码在你手里:

  1. 修改样式:直接打开components/ui/button.tsx,修改 Tailwind 类名。例如,想把所有按钮的圆角改大,直接改rounded-mdrounded-xl
  2. 修改逻辑:如果默认的 Dialog 行为不符合需求,直接修改dialog.tsx里的 Radix UI props 或逻辑。
  3. 主题切换:修改globals.css中的 CSS 变量(如--primary,--background),即可一键切换深色/浅色模式或品牌色。

进阶技巧

1. 批量更新组件

如果 shadcn 官方修复了某个组件的 Bug 或增加了新功能,你可以运行以下命令来更新本地已有的组件:

npx shadcn@latest add button --overwrite # 或者更新所有已安装的组件 npx shadcn@latest add --all --overwrite

注意:--overwrite会覆盖你本地的修改,如果你深度定制过某个组件,请谨慎使用或手动合并。

2. 创建自定义变体 (Variants)

shadcn 组件通常使用class-variance-authority(cva) 来管理变体。你可以在组件文件中轻松添加新的变体。
例如在button.tsx中添加一个 "ghost-danger" 变体:

const buttonVariants = cva( "...", { variants: { variant: { default: "...", destructive: "...", // 新增自定义变体 "ghost-danger": "hover:bg-red-100 hover:text-red-600", }, // ... }, } )

然后在使用时:<Button variant="ghost-danger">删除</Button>

总结

shadcn/ui 的实现本质是:CLI 工具 + 代码生成 + 标准化规范

  • 以前:你依赖一个黑盒 npm 包。
  • 现在:你拥有了一套符合最佳实践的、基于 Radix 和 Tailwind 的高质量源代码,并可以将其作为自己设计系统的基石。
http://www.jsqmd.com/news/412277/

相关文章:

  • 宝妈必看!2026高性价比童装品牌大揭秘 - 品牌测评鉴赏家
  • 英语月份命名为什么无规律?
  • wordpress上传图片无法显示
  • 2026宝妈必看!童装品牌红榜大公开 - 品牌测评鉴赏家
  • AI Agent的多任务并行处理能力开发
  • react之shadcn(一)
  • 宝妈宝爸必看!童装选购不迷路 - 品牌测评鉴赏家
  • 上海直饮水机一站式服务:详解服务体系+靠谱供应商推荐 - 小坤哥
  • 微信小程序个人主体的权限限制
  • 上海直饮水机供应商怎么选?专业科普+靠谱品牌推荐 - 小坤哥
  • 家族族谱生成制作创建管理H5抖音快手微信小程序看广告流量主开源
  • 宝妈宝爸看过来!这些婴童童装,萌娃穿了秒变街拍小达人 - 品牌测评鉴赏家
  • P15444 「IXOI R1」出题人完全不会给题目起名字
  • 【大数据毕设源码分享】基于hadoop+springboot的教材管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 0-16岁儿童鞋服闭眼入指南|8大宝藏品牌+分龄选购秘籍,宝妈抄作业! - 品牌测评鉴赏家
  • 宝妈必看!0-16岁儿童鞋服品牌红榜大公开 - 品牌测评鉴赏家
  • 【大数据毕设源码分享】基于Django+数据可视化的网络招聘信息的数据挖掘研究的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 基于CASADI实现车道跟踪与动态避障的集成路径规划与控制系统研究附Matlab代码
  • 软考系统分析师90天冲刺|DAY02·需求获取技术全解析+5大方法+真题实战
  • 2026宝妈必囤|高性价比儿童鞋服品牌红榜,省钱省心不踩雷 - 品牌测评鉴赏家
  • 【大数据毕设源码分享】基于Django+数据可视化的体育竞技数据分析与可视化系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 2026最新十大知名板材品牌推荐榜!优质环保品质与高性价比源头厂家选择指南,适配全空间定制需求,适配多场景家居需求 - 十大品牌榜
  • 吐血整理!0-16岁儿童鞋服宝藏品牌大盘点 - 品牌测评鉴赏家
  • Solution - P2764 最小路径覆盖问题
  • 国货封神!2026宝妈必藏国产儿童鞋服品牌清单,颜值质感双在线 - 品牌测评鉴赏家
  • 软件低通滤波器(附代码)
  • pc移动端自适应软件库网站源码
  • 餐饮店点餐小程序开源源码
  • Kubernetes(K8s)全面详解与实战指南
  • 发货100文章商品付费阅读系统源码