一个可调整大小的“antd”抽屉?

k1e*_*ran 3 reactjs antd

我想提供一种方法来调整antd抽屉的大小?

我专门阅读了一个流行的答案material-ui/Drawer,但我希望做一些非常类似的事情antd

有没有人有类似的antd例子 - 或者有更好的想法如何处理在抽屉一侧被砍掉的信息。

Cha*_*rei 5

Drawer您可以通过在道具上指定它来扩展宽度width。如果您不想扩展它但希望内容仍然适合,您可以在bodyStyleprop 上设置宽度并使用overflow: "auto"

<Drawer
    title="Basic Drawer"
    placement="right"
    closable={false}
    visible={isDrawerVisible}
    bodyStyle={{
      width: 400,
      overflow: "auto"
    }}
    onClose={toggleDrawerVisible}
>
Run Code Online (Sandbox Code Playgroud)

我还根据您在antd版本(反应钩子版本答案)中提供的链接制作了一个可调整大小的抽屉。

可调整大小的抽屉.jsx

import React, { useState, useEffect } from "react";
import { Drawer } from "antd";

let isResizing = null;

const ResizableDrawer = ({ children, ...props }) => {
  const [drawerWidth, setDrawerWidth] = useState(undefined);

  const cbHandleMouseMove = React.useCallback(handleMousemove, []);
  const cbHandleMouseUp = React.useCallback(handleMouseup, []);

  useEffect(() => {
    setDrawerWidth(props.width);
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [props.visible]);

  function handleMouseup(e) {
    if (!isResizing) {
      return;
    }
    isResizing = false;
    document.removeEventListener("mousemove", cbHandleMouseMove);
    document.removeEventListener("mouseup", cbHandleMouseUp);
  }

  function handleMousedown(e) {
    e.stopPropagation();
    e.preventDefault();
    // we will only add listeners when needed, and remove them afterward
    document.addEventListener("mousemove", cbHandleMouseMove);
    document.addEventListener("mouseup", cbHandleMouseUp);
    isResizing = true;
  }

  function handleMousemove(e) {
    let offsetRight =
      document.body.offsetWidth - (e.clientX - document.body.offsetLeft);
    let minWidth = 256;
    let maxWidth = 600;
    if (offsetRight > minWidth && offsetRight < maxWidth) {
      setDrawerWidth(offsetRight);
    }
  }

  return (
    <Drawer {...props} width={drawerWidth}>
      <div className="sidebar-dragger" onMouseDown={handleMousedown} />
      {children}
    </Drawer>
  );
};

export default ResizableDrawer;
Run Code Online (Sandbox Code Playgroud)

并使用它:

import ResizableDrawer from "./ResizableDrawer";

<ResizableDrawer
    title="Resizable Drawer"
    placement="right"
    closable={false}
    visible={isResizableDrawerVisible}
    onClose={toggleResizableDrawerVisible}
>
    ...
</ResizableDrawer>
Run Code Online (Sandbox Code Playgroud)

请参阅此处的工作演示:

编辑