2018-05-23 10:56:37 +08:00
|
|
|
|
---
|
2022-11-09 12:28:04 +08:00
|
|
|
|
group: 反馈
|
2018-05-23 10:56:37 +08:00
|
|
|
|
category: Components
|
|
|
|
|
title: Drawer
|
2024-03-22 14:22:42 +08:00
|
|
|
|
subtitle: 抽屉
|
|
|
|
|
description: 屏幕边缘滑出的浮层面板。
|
2024-01-29 14:50:36 +08:00
|
|
|
|
cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*BD2JSKm8I-kAAAAAAAAAAAAADrJ8AQ/original
|
|
|
|
|
coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*r29rQ51bNdwAAAAAAAAAAAAADrJ8AQ/original
|
2022-11-09 12:28:04 +08:00
|
|
|
|
demo:
|
|
|
|
|
cols: 2
|
2018-05-23 10:56:37 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 何时使用
|
2018-06-06 22:55:29 +08:00
|
|
|
|
|
2020-12-16 16:01:26 +08:00
|
|
|
|
抽屉从父窗体边缘滑入,覆盖住部分父窗体内容。用户在抽屉内操作时不必离开当前任务,操作完成后,可以平滑地回到原任务。
|
2018-06-26 16:51:51 +08:00
|
|
|
|
|
2019-05-07 14:57:32 +08:00
|
|
|
|
- 当需要一个附加的面板来控制父窗体内容,这个面板在需要时呼出。比如,控制界面展示样式,往界面中添加内容。
|
|
|
|
|
- 当需要在当前任务流中插入临时任务,创建或预览附加内容。比如展示协议条款,创建子对象。
|
2018-05-23 10:56:37 +08:00
|
|
|
|
|
2024-05-14 14:15:33 +08:00
|
|
|
|
> 开发者注意事项:
|
|
|
|
|
>
|
|
|
|
|
> 自 `5.17.0` 版本,我们提供了 `loading` 属性,内置 Spin 组件作为加载状态,但是自 `5.18.0` 版本开始,我们修复了设计失误,将内置的 Spin 组件替换成了 Skeleton 组件,同时收窄了 `loading` api 的类型范围,只能接收 boolean 类型。
|
|
|
|
|
|
2022-11-09 12:28:04 +08:00
|
|
|
|
## 代码演示
|
|
|
|
|
|
2022-11-17 17:31:26 +08:00
|
|
|
|
<!-- prettier-ignore -->
|
2022-11-09 12:28:04 +08:00
|
|
|
|
<code src="./demo/basic-right.tsx">基础抽屉</code>
|
|
|
|
|
<code src="./demo/placement.tsx">自定义位置</code>
|
2024-05-09 11:56:53 +08:00
|
|
|
|
<code src="./demo/loading.tsx" version="5.17.0">加载中</code>
|
2022-11-09 12:28:04 +08:00
|
|
|
|
<code src="./demo/extra.tsx">额外操作</code>
|
|
|
|
|
<code src="./demo/render-in-current.tsx">渲染在当前 DOM</code>
|
|
|
|
|
<code src="./demo/form-in-drawer.tsx">抽屉表单</code>
|
|
|
|
|
<code src="./demo/user-profile.tsx">信息预览抽屉</code>
|
|
|
|
|
<code src="./demo/multi-level-drawer.tsx">多层抽屉</code>
|
|
|
|
|
<code src="./demo/size.tsx">预设宽度</code>
|
2023-09-25 20:37:37 +08:00
|
|
|
|
<code src="./demo/classNames.tsx">自定义内部样式</code>
|
2022-11-09 12:28:04 +08:00
|
|
|
|
<code src="./demo/config-provider.tsx" debug>ConfigProvider</code>
|
|
|
|
|
<code src="./demo/no-mask.tsx" debug>无遮罩</code>
|
|
|
|
|
<code src="./demo/render-panel.tsx" debug>_InternalPanelDoNotUseOrYouWillBeFired</code>
|
|
|
|
|
<code src="./demo/scroll-debug.tsx" debug>滚动锁定调试</code>
|
2023-05-09 19:24:50 +08:00
|
|
|
|
<code src="./demo/component-token.tsx" debug>组件 Token</code>
|
2022-11-09 12:28:04 +08:00
|
|
|
|
|
2018-05-23 10:56:37 +08:00
|
|
|
|
## API
|
|
|
|
|
|
2023-08-08 18:27:48 +08:00
|
|
|
|
通用属性参考:[通用属性](/docs/react/common-props)
|
|
|
|
|
|
2024-01-05 10:12:22 +08:00
|
|
|
|
<!-- prettier-ignore -->
|
|
|
|
|
:::info{title=注意}
|
|
|
|
|
v5 使用 `rootClassName` 与 `rootStyle` 来配置最外层元素样式。原 v4 `className` 与 `style` 改至配置 Drawer 窗体样式以和 Modal 对齐。
|
|
|
|
|
:::
|
2022-08-01 23:20:04 +08:00
|
|
|
|
|
2020-07-12 18:47:14 +08:00
|
|
|
|
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|
|
|
|
|
| --- | --- | --- | --- | --- |
|
2024-03-11 13:37:38 +08:00
|
|
|
|
| autoFocus | 抽屉展开后是否将焦点切换至其 DOM 节点 | boolean | true | 4.17.0 |
|
2022-08-23 16:22:00 +08:00
|
|
|
|
| afterOpenChange | 切换抽屉时动画结束后的回调 | function(open) | - | |
|
2022-08-01 23:20:04 +08:00
|
|
|
|
| className | Drawer 容器外层 className 设置,如果需要设置最外层,请使用 rootClassName | string | - | |
|
2024-02-05 11:45:42 +08:00
|
|
|
|
| classNames | 语义化结构 className | [Record<SemanticDOM, string>](#semantic-dom) | - | 5.10.0 |
|
2024-02-01 10:36:21 +08:00
|
|
|
|
| closeIcon | 自定义关闭图标。5.7.0:设置为 `null` 或 `false` 时隐藏关闭按钮 | ReactNode | <CloseOutlined /> | |
|
2020-10-21 10:33:43 +08:00
|
|
|
|
| destroyOnClose | 关闭时销毁 Drawer 里的子元素 | boolean | false | |
|
2021-06-11 08:39:17 +08:00
|
|
|
|
| extra | 抽屉右上角的操作区域 | ReactNode | - | 4.17.0 |
|
2020-10-21 10:33:43 +08:00
|
|
|
|
| footer | 抽屉的页脚 | ReactNode | - | |
|
|
|
|
|
| forceRender | 预渲染 Drawer 内元素 | boolean | false | |
|
2022-04-20 23:14:32 +08:00
|
|
|
|
| getContainer | 指定 Drawer 挂载的节点,**并在容器内展现**,`false` 为挂载在当前位置 | HTMLElement \| () => HTMLElement \| Selectors \| false | body | |
|
2023-09-01 23:39:56 +08:00
|
|
|
|
| height | 高度,在 `placement` 为 `top` 或 `bottom` 时使用 | string \| number | 378 | |
|
2020-10-21 10:33:43 +08:00
|
|
|
|
| keyboard | 是否支持键盘 esc 关闭 | boolean | true | |
|
|
|
|
|
| mask | 是否展示遮罩 | boolean | true | |
|
|
|
|
|
| maskClosable | 点击蒙层是否允许关闭 | boolean | true | |
|
|
|
|
|
| placement | 抽屉的方向 | `top` \| `right` \| `bottom` \| `left` | `right` | |
|
2020-07-12 18:47:14 +08:00
|
|
|
|
| push | 用于设置多层 Drawer 的推动行为 | boolean \| { distance: string \| number } | { distance: 180 } | 4.5.0+ |
|
2022-08-01 23:20:04 +08:00
|
|
|
|
| rootStyle | 可用于设置 Drawer 最外层容器的样式,和 `style` 的区别是作用节点包括 `mask` | CSSProperties | - | |
|
2021-06-11 08:39:17 +08:00
|
|
|
|
| size | 预设抽屉宽度(或高度),default `378px` 和 large `736px` | 'default' \| 'large' | 'default' | 4.17.0 |
|
2022-08-01 23:20:04 +08:00
|
|
|
|
| style | 设计 Drawer 容器样式,如果你只需要设置内容部分请使用 `bodyStyle` | CSSProperties | - | |
|
2024-02-05 11:45:42 +08:00
|
|
|
|
| styles | 语义化结构 style | [Record<SemanticDOM, CSSProperties>](#semantic-dom) | - | 5.10.0 |
|
2020-10-21 10:33:43 +08:00
|
|
|
|
| title | 标题 | ReactNode | - | |
|
2024-05-14 14:15:33 +08:00
|
|
|
|
| loading | 显示骨架屏 | boolean | false | 5.17.0 |
|
2022-09-07 10:35:16 +08:00
|
|
|
|
| open | Drawer 是否可见 | boolean | - |
|
2021-06-11 08:39:17 +08:00
|
|
|
|
| width | 宽度 | string \| number | 378 | |
|
2020-10-21 10:33:43 +08:00
|
|
|
|
| zIndex | 设置 Drawer 的 `z-index` | number | 1000 | |
|
2021-11-26 08:33:23 +08:00
|
|
|
|
| onClose | 点击遮罩层或左上角叉或取消按钮的回调 | function(e) | - | |
|
2024-05-30 20:45:47 +08:00
|
|
|
|
| drawerRender | 自定义渲染抽屉 | (node: ReactNode) => ReactNode | - | 5.19.0 |
|
2023-04-11 10:25:24 +08:00
|
|
|
|
|
2024-02-05 11:45:42 +08:00
|
|
|
|
## Semantic DOM
|
|
|
|
|
|
|
|
|
|
<code src="./demo/_semantic.tsx" simplify="true"></code>
|
|
|
|
|
|
2023-08-30 23:02:35 +08:00
|
|
|
|
## 主题变量(Design Token)
|
2023-04-11 10:25:24 +08:00
|
|
|
|
|
|
|
|
|
<ComponentTokenTable component="Drawer"></ComponentTokenTable>
|