- 手风琴
- 提示
- 警告对话框
- 宽高比
- 头像
- 徽章
- 面包屑导航
- 按钮
- 按钮组
- 日历 Calendar
- 卡片
- Carousel
- 图表 Chart
- 复选框
- 折叠面板
- 组合框
- 命令
- 上下文菜单
- 数据表格 Data Table
- 日期选择器 Date Picker
- 对话框 Dialog
- 抽屉
- 下拉菜单
- Empty
- 字段
- 悬停卡片
- 输入
- 输入组
- 输入 OTP
- 项目
- Kbd
- 标签
- 菜单栏
- 原生选择框
- 导航菜单 Navigation Menu
- 分页
- 弹出框
- 进度 Progress
- 单选框组
- 可调整大小
- 滚动区域 Scroll Area
- 选择框
- 分隔符 Separator
- 侧边栏 Sheet
- 侧边栏 Sidebar
- 骨架屏
- 滑块
- Sonner
- 加载指示器 Spinner
- 开关
- 表格
- 标签页 Tabs
- 文本域
- 吐司
- 切换按钮 Toggle
- 切换组
- 提示 Tooltip
- 排版
更新: 我们在 latest 版本中已添加对 React 19 和 Tailwind v4 的全面支持。本指南可能已过时,请谨慎使用。
精简总结(TL;DR)
如果你使用 npm,可以通过添加标志来安装 shadcn/ui 的依赖。在运行 shadcn CLI 时,会提示你选择一个标志。使用 pnpm、bun 或 yarn 则无需添加标志。
有关每个包对 React 19 支持的状态,请参阅 升级状态。
发生了什么?
React 19 现已为 候选版本,并且已在最新版 Next.js 15 中测试并支持。
为了支持 React 19,包维护者需要测试并更新他们的包,将 React 19 作为 peer dependency 添加进来。这项工作已经在进行中、进行中 和进行中。
"peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0",
- "react-dom": "^16.8 || ^17.0 || ^18.0"
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0"
},你可以通过运行 npm info <package> peerDependencies 来检查包是否已将 React 19 列为 peer dependency。
与此同时,如果你安装的包 未 将 React 19 列为 peer dependency,会看到类似如下的错误信息:
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: my-app@0.1.0
npm error Found: react@19.0.0-rc-69d4b800-20241021
npm error node_modules/react
npm error react@"19.0.0-rc-69d4b800-20241021" from the root project注意: 这仅在 npm 中出现。PNPM 和 Bun 只会显示静默警告。
如何解决
方案一:--force 或 --legacy-peer-deps
你可以使用 --force 或 --legacy-peer-deps 标志强制安装包:
npm i <package> --force
npm i <package> --legacy-peer-deps这将安装包并忽略 peer dependency 警告。
方案二:使用 React 18
你可以将 react 和 react-dom 降级到版本 18,这样就与所安装的包兼容,等依赖更新后再升级。
npm i react@18 react-dom@18无论选择哪种方案,请务必充分测试你的应用,确保不会出现回归问题。
在 Next.js 15 上使用 shadcn/ui
使用 pnpm、bun 或 yarn
请按照安装指南中的步骤安装 shadcn/ui,无需任何标志。
使用 npm
当你运行 npx shadcn@latest init -d 时,会提示你选择一种方式以解决 peer dependency 问题:
It looks like you are using React 19.
Some packages may fail to install due to peer dependency issues (see https://ui.shadcn.com/react-19).
? How would you like to proceed? › - Use arrow-keys. Return to submit.
❯ Use --force
Use --legacy-peer-deps接着,你可以使用选择的标志运行该命令。
添加组件
添加组件的流程与上述相同。请选择一个标志来解决 peer dependency 问题。
请记得每次安装新依赖后,务必测试你的应用。
升级状态
为了方便你跟踪升级进度,我制作了下面的表格,列出了 shadcn/ui 依赖包对 React 19 的支持状态。
- ✅ - 使用 npm、pnpm 和 bun 均支持 React 19。
- 🚧 - 使用 pnpm 和 bun 支持 React 19。npm 需要添加标志。相关 PR 正在进行中。
| 包 | 状态 | 备注 |
|---|---|---|
| radix-ui | ✅ | |
| lucide-react | ✅ | |
| class-variance-authority | ✅ | 未将 React 19 列为 peer dependency。 |
| tailwindcss-animate | ✅ | 未将 React 19 列为 peer dependency。 |
| embla-carousel-react | ✅ | |
| recharts | ✅ | 见下文说明 |
| react-hook-form | ✅ | |
| react-resizable-panels | ✅ | |
| sonner | ✅ | |
| react-day-picker | ✅ | npm 需要添加标志支持。升级到 v9 的工作正在进行中。 |
| input-otp | ✅ | |
| vaul | ✅ | |
| @radix-ui/react-icons | 🚧 | 见PR #194 |
| cmdk | ✅ |
如果你有任何问题,请在 GitHub 上提交 issue。
Recharts
要在 React 19 中使用 recharts,你需要重写 react-is 依赖。
在你的 package.json 中添加如下内容:
"overrides": {
"react-is": "^19.0.0-rc-69d4b800-20241021"
}注意:react-is 的版本需要与你使用的 React 19 版本相匹配,上述为示例。