• 简体中文
  • Drawer 抽屉

    从页面边缘展开内容,查看详情或完成操作。

    基础用法

    交互预览基础用法
    basic.tsx
    import { Button, Drawer, Form, FormField, Input, Select } from '@sudden3/leaf-ui';
    import { useState } from 'react';
    export function DrawerBasic() {
      const [placement, setPlacement] = useState<'left' | 'right' | 'top' | 'bottom'>('right');
      const [open, setOpen] = useState(false);
      return (
        <div className="leaf-demo-stack leaf-demo-stack--wide">
          <div className="leaf-demo-row">
            {(['left', 'right', 'top', 'bottom'] as const).map((side) => (
              <Button
                key={side}
                variant="outline"
                onClick={() => {
                  setPlacement(side);
                  setOpen(true);
                }}
              >
                {side}
              </Button>
            ))}
          </div>
          <Drawer
            open={open}
            placement={placement}
            title="项目设置"
            onClose={() => setOpen(false)}
            footer={
              <>
                <Button variant="outline" onClick={() => setOpen(false)}>
                  取消
                </Button>
                <Button type="submit" form="drawer-project">
                  保存
                </Button>
              </>
            }
          >
            <Form
              id="drawer-project"
              onSubmit={(event) => {
                event.preventDefault();
                setOpen(false);
              }}
            >
              <FormField label="项目名称" required>
                <Input name="name" defaultValue="Leaf Garden" />
              </FormField>
              <FormField label="项目类型">
                <Select
                  name="type"
                  defaultValue="design"
                  options={[
                    { value: 'design', label: '设计项目' },
                    { value: 'development', label: '开发项目' },
                  ]}
                />
              </FormField>
            </Form>
          </Drawer>
        </div>
      );
    }
    

    Drawer API

    属性类型默认值说明
    openboolean必填是否展开
    titleReactNode—标题
    childrenReactNode—抽屉内容
    placement'left' | 'right' | 'top' | 'bottom''right'展开方向
    widthnumber | string380左右抽屉宽度
    heightnumber | string300上下抽屉高度
    extraReactNode—标题旁的操作内容
    footerReactNode—底部内容
    closable / maskClosable / keyboardbooleantrue关闭按钮 / 点击遮罩 / Escape 关闭
    onClose() => void—请求关闭,由应用更新 open
    afterClose() => void—关闭过渡结束后触发

    类型

    定义组件属性或组装列表时可导入相关类型。

    import type { DrawerProps } from '@sudden3/leaf-ui';

    使用说明

    通过 footer 放置取消、提交等操作;表单提交按钮可使用 form 属性关联抽屉内的表单。标题为空时请使用 aria-label 提供名称。支持嵌套弹窗和抽屉,关闭后焦点会回到打开位置。