组件 Blocks 提供预先构建好的、可组合的 UI 部分,开发者可以直接复制代码到他们的应用程序中。与单个组件(参见 核心组件)不同,Blocks 代表完整的 UI 模式,例如仪表板、表单、登陆页面部分或应用程序布局,它们将多个组件、hooks 和工具组合成功能单元。
有关支持 Blocks 的底层组件注册系统的信息,请参阅 组件注册系统。有关安装 Blocks 时使用的 CLI 命令的详细信息,请参阅 组件管理。
Blocks 系统作为组件注册的扩展,提供更大、更复杂的 UI 组合,同时保持与单个组件相同的复制粘贴理念。
来源: apps/www/app/(app)/blocks/layout.tsx1-74 apps/www/content/docs/blocks.mdx89-151
来源: apps/www/content/docs/blocks.mdx67-86 apps/www/content/docs/blocks.mdx110-132
Blocks 在 registry-blocks.ts 文件中定义,遵循结构化的 schema,该 schema 指定了元数据、依赖项和文件映射。
每个 Block 定义包含以下属性
| 属性 | 类型 | 描述 |
|---|---|---|
名称 | 字符串 | Block 的唯一标识符 |
作者 | 字符串 | Block 作者信息 |
title | 字符串 | Block 的显示标题 |
description | 字符串 | Block 用途的简要描述 |
类型 | "registry:block" | 固定的类型标识符 |
registryDependencies | string[] | 所需的 shadcn/ui 组件 |
dependencies | string[] | 必需的外部 npm 包 |
files | FileDefinition[] | Block 中包含的文件数组 |
categories | string[] | 用于组织分类 |
Block 中的每个文件包含
来源: apps/www/content/docs/blocks.mdx99-138 apps/www/content/docs/blocks.mdx234-238
Blocks 类别在 registry-categories.ts 中定义,并控制 Blocks 在浏览界面中的组织方式
每个类别定义包含
name: 类别的显示名称slug: 适合 URL 的标识符hidden: 是否从导航中隐藏来源: apps/www/content/docs/blocks.mdx216-227
Block 开发过程遵循以下步骤
Blocks 在 apps/www/registry/new-york/blocks 内遵循一致的目录结构
dashboard-01/
├── page.tsx # Main page component (registry:page)
├── components/ # UI components (registry:component)
│ ├── hello-world.tsx
│ └── example-card.tsx
├── hooks/ # Custom hooks (registry:hook)
│ └── use-hello-world.ts
└── lib/ # Utility functions (registry:lib)
└── format-date.ts
来源: apps/www/content/docs/blocks.mdx46-86
命令 pnpm registry:build 处理 Block 定义并生成必要的元数据和资源
命令 pnpm registry:capture 生成视觉预览
Blocks 可以通过以下方式预览
http://:3333/blocks/[CATEGORY]http://:3333/view/styles/new-york/[BLOCK_NAME]来源: apps/www/content/docs/blocks.mdx141-170 apps/www/content/docs/blocks.mdx186-201
位于 apps/www/app/(app)/blocks/layout.tsx44-74 中的 BlocksLayout 组件提供了 Blocks 浏览体验的主要结构
BlocksNavBlocks 界面包含
href="#blocks")href="/docs/blocks")BlocksNav 组件提供支持,用于过滤来源: apps/www/app/(app)/blocks/layout.tsx16-73
Blocks 集成了 shadcn CLI 进行安装
CLI 系统可以通过以下方式安装 Blocks
registryDependencies (shadcn/ui 组件)dependencies (npm 包)target 路径进行文件路由来源: apps/www/content/docs/blocks.mdx175-207 apps/www/content/docs/blocks.mdx110-132