SuperAPI AI 工具集

composition-pattern

编程与开发

查看项目

更新于 10-15 23:33

技能介绍

用途:帮助开发者设计可复用 UI 组件的 API,用组合(接受动态内容)取代堆砌配置属性,让使用方掌控内容与呈现。

主要能力与必要用法:

  1. 用 children/插槽替代配置属性。内容在多次使用间会变化时,接受 children 或具名插槽,而非逐一列举 props。React 用 children 与具名 ReactNode props;Vue、Svelte、Astro、Web Components 用带 name 属性的 <slot>;Angular 用 <ng-content select="[slot-name]">。
  2. 多个内容区域用具名插槽,如 header、footer 区域。
  3. 复合组件共享隐式状态,子组件挂载在父组件上(如 Tabs.Trigger、Tabs.Content),内部状态经 Context 或 provide/inject 流动,使用方不显式管理。
  4. 无头组件分离行为与样式,仅导出逻辑(如 useToggle 返回 isOpen、toggle、getToggleProps、getContentProps),由使用方提供全部 UI。
  5. 多态组件用 as/tag prop 控制渲染的 HTML 元素或组件类型,如 <Text as="h1">、<Button as="a" href="/page">。 避免 props 爆炸,用子组件自由组合(Modal.Header、Modal.Body、Modal.Footer)。

适用场景:可复用组件库或设计系统;内容多变的布局组件(卡片、模态框、标签页、手风琴);需要灵活内容槽的组件;希望通过组合减少 prop 层层传递。

限制与不适用:内容固定、单次使用、无内容变化的简单组件无需组合。渲染属性(render props)适用于使用方需访问内部状态的场景;复合组件只有 2-3 个直接子级时可用 React.Children.map,4 个以上或嵌套较深时用 Context;泛型可参数化渲染回调以保持类型安全。

补充资源:React 组合、Astro 组合(具名插槽、回退内容、条件插槽)与 Context 模式参考文档。具体安装命令、版本要求与许可信息暂未提供。