Drawer 抽屉

抽屉是一种从屏幕边缘滑出的浮层面板,可以替代模态对话框,承载更多内容。

引入

import { Drawer } from 'kitty-react';

基础用法

import React, { useState } from 'react';
import { Button, Drawer } from 'kitty-react';

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

  const showDrawer = () => {
    setOpen(true);
  };

  const closeDrawer = () => {
    setOpen(false);
  };

  return (
    <div>
      <Button onClick={showDrawer}>打开抽屉</Button>
      <Drawer
        open={open}
        onClose={closeDrawer}
        title="基础抽屉"
      >
        <p>这是一个基础抽屉的内容</p>
        <p className="mt-4">你可以放置任何内容在这里</p>
      </Drawer>
    </div>
  );
}

不同方向

抽屉可以从上、右、下、左四个方向滑出。

function PlacementDrawer() {
  const [open, setOpen] = useState(false);
  const [placement, setPlacement] = useState("right");

  const showDrawer = (p) => {
    setPlacement(p);
    setOpen(true);
  };

  return (
    <div className="flex flex-wrap gap-4">
      <Button onClick={() => showDrawer("top")}>从上方打开</Button>
      <Button onClick={() => showDrawer("right")}>从右侧打开</Button>
      <Button onClick={() => showDrawer("bottom")}>从下方打开</Button>
      <Button onClick={() => showDrawer("left")}>从左侧打开</Button>
      
      <Drawer
        open={open}
        onClose={() => setOpen(false)}
        placement={placement}
        title={`${placement}方向的抽屉`}
      >
        <p>这是一个可以从不同方向打开的抽屉</p>
      </Drawer>
    </div>
  );
}

不同尺寸

抽屉有四种预设尺寸:smmdlgfull

function SizeDrawer() {
  const [open, setOpen] = useState(false);
  const [size, setSize] = useState("md");

  const showDrawer = (s) => {
    setSize(s);
    setOpen(true);
  };

  return (
    <div className="flex flex-wrap gap-4">
      <Button onClick={() => showDrawer("sm")}>小抽屉</Button>
      <Button onClick={() => showDrawer("md")}>中抽屉</Button>
      <Button onClick={() => showDrawer("lg")}>大抽屉</Button>
      <Button onClick={() => showDrawer("full")}>全屏抽屉</Button>
      
      <Drawer
        open={open}
        onClose={() => setOpen(false)}
        size={size}
        title={`${size}尺寸的抽屉`}
      >
        <p>这是一个不同尺寸的抽屉</p>
      </Drawer>
    </div>
  );
}

带页脚的抽屉

你可以在抽屉中添加页脚,通常用于放置操作按钮。

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

  return (
    <div>
      <Button onClick={() => setOpen(true)}>带页脚的抽屉</Button>
      <Drawer
        open={open}
        onClose={() => setOpen(false)}
        title="带页脚的抽屉"
        footer={
          <div className="flex justify-end gap-2">
            <Button variant="outline" onClick={() => setOpen(false)}>取消</Button>
            <Button onClick={() => setOpen(false)}>确定</Button>
          </div>
        }
      >
        <p>这是一个带有页脚的抽屉</p>
        <p className="mt-4">页脚通常用于放置操作按钮</p>
      </Drawer>
    </div>
  );
}

API

属性

属性说明类型默认值
open是否显示抽屉boolean-
onClose关闭抽屉的回调函数() => void-
placement抽屉的位置'left' | 'right' | 'top' | 'bottom''right'
size抽屉的大小'sm' | 'md' | 'lg' | 'full''md'
maskClosable点击遮罩层是否可以关闭booleantrue
mask是否显示遮罩层booleantrue
title抽屉的标题React.ReactNode-
closeIcon关闭按钮boolean | React.ReactNodetrue
className抽屉容器的类名string-
style抽屉容器的样式React.CSSProperties-
contentClassName抽屉内容的类名string-
contentStyle抽屉内容的样式React.CSSProperties-
footer页脚内容React.ReactNode-
footerClassName页脚的类名string-