布局容器
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...
受控状态
通过 open 和 onOpenChange 可以完全控制展开状态;通过 defaultOpen 可以设置非受控默认状态。
const [open, setOpen] = useState(false);
<Collapsible open={open} onOpenChange={setOpen} content={<div>Details</div>}>
<CollapsibleTrigger>Toggle</CollapsibleTrigger>
</Collapsible>;API
Collapsible
通用属性参考:支持 Radix Collapsible Root 的属性,如 open、defaultOpen、onOpenChange 和 disabled。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| children | 常驻内容,通常包含 CollapsibleTrigger | ReactNode | - |
| content | 展开后显示的内容,渲染到 CollapsibleContent 内 | ReactNode | - |
| open | 受控展开状态 | boolean | - |
| defaultOpen | 非受控默认展开状态 | boolean | false |
| onOpenChange | 展开状态变化时触发 | (open: boolean) => void | - |
| disabled | 禁用触发交互 | boolean | false |
| forceMountContent | 强制挂载内容区,适合需要保留 DOM 或自定义动画时使用 | true | - |
| size | 尺寸,影响根容器字号 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | - |
| className | 根容器 class;存在时优先于 classNames.root | ClassValue | - |
| classNames | 各 slot 的自定义 class(root / content) | CollapsibleClassNames | - |
子组件
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| CollapsibleRoot | 状态根容器,支持 Radix Collapsible Root 属性 | CollapsibleRootProps | - |
| CollapsibleContent | 可展开内容区,支持 Radix Collapsible Content 属性 | CollapsibleContentProps | - |
| CollapsibleTrigger | 展开触发器,直接导出自 Radix Collapsible Trigger,支持 asChild | CollapsibleTriggerProps | - |
类型
CollapsibleProps
主组件属性。继承 CollapsibleRootProps,并增加 content、forceMountContent 和 slot class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 常驻内容,通常包含触发器。 |
| content | ReactNode | 展开内容。 |
| open | boolean | 受控展开状态。来自 Radix Root props。 |
| defaultOpen | boolean | 非受控默认展开状态。来自 Radix Root props。 |
| onOpenChange | (open: boolean) => void | 展开状态变化回调。来自 Radix Root props。 |
| disabled | boolean | 禁用触发交互。来自 Radix Root props。 |
| forceMountContent | true | 强制挂载内容区。 |
| className | ClassValue | 根容器 class。 |
| classNames | CollapsibleClassNames | 各 slot 的自定义 class。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响根容器字号。 |
CollapsibleClassNames
Collapsible 可配置 slot 的 class。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 根容器 class。 |
| content | ClassValue | 内容区 class。 |
CollapsibleRootProps
根容器属性。继承 Radix Collapsible Root 属性,并增加 className 和 size。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 子节点。 |
| className | ClassValue | 根容器 class。 |
| open | boolean | 受控展开状态。 |
| defaultOpen | boolean | 非受控默认展开状态。 |
| onOpenChange | (open: boolean) => void | 展开状态变化回调。 |
| disabled | boolean | 禁用触发交互。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响根容器字号。 |
CollapsibleContentProps
内容区属性。继承 Radix Collapsible Content 属性,并增加 className。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 内容区内容。 |
| className | ClassValue | 内容区 class。 |
| forceMount | true | 强制挂载内容区。 |
CollapsibleTriggerProps
触发器属性。直接来自 Radix Collapsible Trigger。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 触发器内容。 |
| asChild | boolean | 将触发行为合并到子元素。 |
| disabled | boolean | 禁用触发交互。 |