Skyroc UI
布局容器

Collapsible

用于展开或收起局部内容的折叠组件

折叠面板(Collapsible)用于在当前页面中隐藏或显示一段局部内容,适合展示可选详情、附加信息或可展开的配置区域。

import { Collapsible, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger } from '@skyroc/web-ui';

架构说明

Collapsible 基于 Radix Collapsible 封装,主组件负责组合根容器和动画内容区,触发器通过 CollapsibleTrigger 放在 children 中。

  • Collapsible:主组件,接收触发器区域 children,并通过 content 渲染可折叠内容。
  • CollapsibleRoot:状态根容器,支持受控和非受控打开状态。
  • CollapsibleContent:内容区,带展开/收起动画。
  • CollapsibleTrigger:触发器,直接导出自 Radix,常配合 asChild 包裹按钮。

何时使用

  • 页面中有次要信息,需要由用户按需展开时。
  • 需要在列表、卡片或设置项中收纳额外内容时。
  • 需要保持当前页面上下文,不希望打开 Dialog 或 Drawer 时。
  • 如果内容是多个互斥展开项,优先使用 Accordion。

基础用法

将固定展示内容和 CollapsibleTrigger 放在 children 中,将可展开内容传给 content

Preview
Code
Loading...

受控状态

通过 openonOpenChange 可以完全控制展开状态;通过 defaultOpen 可以设置非受控默认状态。

const [open, setOpen] = useState(false);

<Collapsible open={open} onOpenChange={setOpen} content={<div>Details</div>}>
  <CollapsibleTrigger>Toggle</CollapsibleTrigger>
</Collapsible>;

API

Collapsible

通用属性参考:支持 Radix Collapsible Root 的属性,如 opendefaultOpenonOpenChangedisabled

属性说明类型默认值
children常驻内容,通常包含 CollapsibleTriggerReactNode-
content展开后显示的内容,渲染到 CollapsibleContent 内ReactNode-
open受控展开状态boolean-
defaultOpen非受控默认展开状态booleanfalse
onOpenChange展开状态变化时触发(open: boolean) => void-
disabled禁用触发交互booleanfalse
forceMountContent强制挂载内容区,适合需要保留 DOM 或自定义动画时使用true-
size尺寸,影响根容器字号'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'-
className根容器 class;存在时优先于 classNames.rootClassValue-
classNames各 slot 的自定义 class(root / content)CollapsibleClassNames-

子组件

属性说明类型默认值
CollapsibleRoot状态根容器,支持 Radix Collapsible Root 属性CollapsibleRootProps-
CollapsibleContent可展开内容区,支持 Radix Collapsible Content 属性CollapsibleContentProps-
CollapsibleTrigger展开触发器,直接导出自 Radix Collapsible Trigger,支持 asChildCollapsibleTriggerProps-

类型

CollapsibleProps

主组件属性。继承 CollapsibleRootProps,并增加 content、forceMountContent 和 slot class 配置。

字段类型说明
childrenReactNode常驻内容,通常包含触发器。
contentReactNode展开内容。
openboolean受控展开状态。来自 Radix Root props。
defaultOpenboolean非受控默认展开状态。来自 Radix Root props。
onOpenChange(open: boolean) => void展开状态变化回调。来自 Radix Root props。
disabledboolean禁用触发交互。来自 Radix Root props。
forceMountContenttrue强制挂载内容区。
classNameClassValue根容器 class。
classNamesCollapsibleClassNames各 slot 的自定义 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响根容器字号。

CollapsibleClassNames

Collapsible 可配置 slot 的 class。

字段类型说明
rootClassValue根容器 class。
contentClassValue内容区 class。

CollapsibleRootProps

根容器属性。继承 Radix Collapsible Root 属性,并增加 className 和 size。

字段类型说明
childrenReactNode子节点。
classNameClassValue根容器 class。
openboolean受控展开状态。
defaultOpenboolean非受控默认展开状态。
onOpenChange(open: boolean) => void展开状态变化回调。
disabledboolean禁用触发交互。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸,影响根容器字号。

CollapsibleContentProps

内容区属性。继承 Radix Collapsible Content 属性,并增加 className。

字段类型说明
childrenReactNode内容区内容。
classNameClassValue内容区 class。
forceMounttrue强制挂载内容区。

CollapsibleTriggerProps

触发器属性。直接来自 Radix Collapsible Trigger。

字段类型说明
childrenReactNode触发器内容。
asChildboolean将触发行为合并到子元素。
disabledboolean禁用触发交互。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page