Acme

组件预览

如何在文档中使用 ComponentPreview 和 ComponentSource 组件

简介

ComponentPreviewComponentSource 组件用于在文档中展示组件示例,提供交互式的预览和代码查看功能。

ComponentPreview

ComponentPreview 组件提供标签页模式,允许用户在预览和代码之间切换。

使用方法

<ComponentPreview name="button-demo" description="按钮示例" />

属性

属性类型默认值描述
namestring必填示例组件的名称,需要在 registry 中注册
descriptionstring可选示例的描述文字
align"center" | "start" | "end""center"预览区域的对齐方式
classNamestring可选自定义 CSS 类名

功能

  • 预览标签页: 展示组件的实际渲染效果
  • 代码标签页: 显示组件的源代码
  • 复制按钮: 一键复制代码到剪贴板
  • 在 v0 中打开: 在 v0.dev 中打开组件进行编辑

ComponentSource

ComponentSource 组件同时展示预览和代码,适合需要同时查看两者的场景。

使用方法

<ComponentSource name="button-demo" />

属性

属性类型默认值描述
namestring必填示例组件的名称,需要在 registry 中注册
align"center" | "start" | "end""center"预览区域的对齐方式
classNamestring可选自定义 CSS 类名

功能

  • 上方预览: 展示组件的实际渲染效果
  • 下方代码: 显示组件的源代码
  • 复制按钮: 一键复制代码到剪贴板
  • 在 v0 中打开: 在 v0.dev 中打开组件进行编辑

添加新示例

要添加新的示例组件,按照以下步骤操作:

创建示例组件

registry/new-york/examples/ 目录下创建你的示例组件:

registry/new-york/examples/my-component-demo.tsx
import { Button } from "@/registry/new-york/ui/button"

export default function MyComponentDemo() {
  return (
    <div className="flex items-center gap-2">
      <Button>Click me</Button>
    </div>
  )
}

注册示例

registry/registry-examples.ts 中注册你的示例:

export const examples: Registry["items"] = [
  // ... 其他示例
  {
    name: "my-component-demo",
    type: "registry:example",
    description: "我的组件示例",
    registryDependencies: ["button"],
    files: [
      {
        path: "examples/my-component-demo.tsx",
        type: "registry:example",
      },
    ],
  },
]

构建 Registry

运行构建命令生成 registry 文件:

pnpm run registry:build

在文档中使用

在你的 MDX 文档中使用新的示例:

<ComponentPreview name="my-component-demo" description="我的组件示例" />

最佳实践

  1. 清晰的命名: 使用描述性的名称,如 button-sizecard-with-form
  2. 添加描述: 为每个示例添加有意义的描述文字
  3. 保持简洁: 示例代码应该聚焦于展示特定功能,避免过于复杂
  4. 合理对齐: 根据组件特性选择合适的对齐方式
  5. 依赖声明: 确保在 registry 中正确声明所有依赖

技术实现

  • 动态加载: 使用 React.lazy 实现组件的按需加载
  • 代码获取: 从 /r/*.json 文件动态获取源代码
  • 代码高亮: 使用 fumadocs-ui 的 CodeBlock 组件
  • 标签页: 使用 fumadocs-ui 的 Tabs 组件