Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/项目笔记/代达罗斯/Anatomy

定义

3 分钟阅读 · Note

目录树 578 篇

            • 定义
            • 交叉类型 & 与联合类型
            • 数组转联合
            • Anatomy包
            • Extract
            • IIFE写法的工厂函数
            • TS类型 extends
          • 项目待做
          • 性能优化
          • UI设计
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗交叉类型 & 与联合类型同一路径↗数组转联合同一路径↗Anatomy包同一路径↗Extract同一路径↗IIFE写法的工厂函数同一路径↗TS类型 extends同一路径
  • 定义

定义

https://chatgpt.com/share/6a55fbe9-a63c-83ec-a345-f748d3ef6cd0

你记忆没错,这两个词其实都出现过,但是含义不一样,而且最近 shadcn 确实在往 Composition 这个词上统一。

以前的 Anatomy

Anatomy 这个词其实不是 shadcn 发明的,它最早在设计系统里很常见,例如:

Chakra UI —— Component Anatomy Adobe Spectrum —— Anatomy IBM Carbon —— Anatomy Material Design 的很多文档也会画组件 Anatomy

意思就是:

这个组件由哪些部件(Parts)组成。

例如一个 Dialog:

Dialog ├── Overlay ├── Content │ ├── Header │ ├── Body │ └── Footer └── CloseButton

这张图就是 Anatomy。

强调的是:

「长什么样,由哪些器官组成。」

现在为什么变成 Composition?

今年(2026 年 4 月)shadcn 专门发了一篇更新:

Component Composition

里面写得很明确:

他们开始在每个组件页面增加 Composition 章节。

例如 Card:

Card ├── CardHeader │ ├── CardTitle │ ├── CardDescription │ └── CardAction ├── CardContent └── CardFooter

官方解释也很直接:

我们发现 LLM 和 Coding Agent 在看到完整的组件结构之后,生成代码明显更稳定,更少出现缺失 Wrapper、层级错误等问题。

所以这里已经不是为了给设计师看的 Anatomy,而是为了:

告诉 AI 和开发者,这些组件应该怎么组合。

两个词到底区别是什么?

其实非常微妙。

Anatomy

回答的是:

What are the parts?

有哪些部件?

Card

Header Content Footer

强调组成。

Composition

回答的是:

How should these parts be composed?

这些部件应该怎么组合?

<Card> <CardHeader> <CardTitle /> </CardHeader>

<CardContent />

<CardFooter /> </Card>

强调使用方式。

举个更明显的例子:

Drawer:

Drawer ├── DrawerTrigger └── DrawerContent ├── DrawerHeader │ ├── DrawerTitle │ └── DrawerDescription └── DrawerFooter

官方现在标题就是:

Composition

因为这里不仅告诉你有哪些 Parts,还告诉你:

Trigger 必须放哪 Content 必须包哪些 Header 在哪里 Footer 在哪里

这是一个 Composition Tree。

为什么 shadcn 不继续叫 Anatomy?

从公开信息来看,有几个原因。

1)AI Friendly

这是官方自己写出来的。

Composition Tree 对 LLM 更容易理解:

Tabs ├── TabsList │ ├── TabsTrigger │ └── TabsTrigger ├── TabsContent └── TabsContent

AI 可以直接照着生成 JSX。

而 "Anatomy" 更偏概念,不强调父子关系。

2)React 社区一直在强调 Composition

React 官方这些年一直在讲:

Composition over inheritance

React 的世界里:

Compound Components Slot Children asChild render prop

其实都属于 Composition。

所以这个词跟 React 的哲学更加一致。

3)现在的 shadcn 已经把 "Composition" 当成核心理念

现在首页介绍里面,Composition 已经被列成五大原则之一:

Open Code Composition Distribution Beautiful Defaults AI Ready

官方的定义是:

Every component uses a common, composable interface.

可以看到,它已经不是一个文档章节,而是整个设计哲学。

我自己的理解

如果你在设计自己的组件系统,我会建议把这两个概念区分开:

名称 回答的问题 内容 Anatomy 它由什么组成? Parts、Slots、区域划分 Composition 应该怎么拼起来? JSX Tree、父子关系、合法嵌套 API 每个部分怎么用? Props、Events、Variants Examples 实际怎么写? Demo、最佳实践

很多成熟设计系统都会同时有 Anatomy 和 Composition 两层文档。

而 shadcn 最近的变化,并不是否定 Anatomy,而是把重点放到了 Composition Tree 上,因为这既更符合 React 的设计思想,也更利于 AI 和开发者正确使用组件。