当前位置:首页 > React

react实现drawer

2026-01-26 14:36:47React

React 实现 Drawer 组件

在 React 中实现 Drawer(抽屉)组件可以通过多种方式完成,以下是几种常见的方法:

使用 Material-UI 库

Material-UI 提供了现成的 Drawer 组件,可以快速实现抽屉效果。

import React from 'react';
import { Drawer, Button } from '@material-ui/core';

function App() {
  const [open, setOpen] = React.useState(false);

  const toggleDrawer = () => {
    setOpen(!open);
  };

  return (
    <div>
      <Button onClick={toggleDrawer}>Toggle Drawer</Button>
      <Drawer anchor="left" open={open} onClose={toggleDrawer}>
        <div style={{ width: 250 }}>
          <p>Drawer Content</p>
        </div>
      </Drawer>
    </div>
  );
}

export default App;

使用 Ant Design 库

Ant Design 也提供了 Drawer 组件,使用方式类似。

import React from 'react';
import { Drawer, Button } from 'antd';

function App() {
  const [visible, setVisible] = React.useState(false);

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

  const onClose = () => {
    setVisible(false);
  };

  return (
    <div>
      <Button type="primary" onClick={showDrawer}>
        Open Drawer
      </Button>
      <Drawer
        title="Basic Drawer"
        placement="left"
        onClose={onClose}
        visible={visible}
      >
        <p>Drawer Content</p>
      </Drawer>
    </div>
  );
}

export default App;

自定义 Drawer 组件

如果需要完全自定义 Drawer 组件,可以通过 CSS 和 React 状态管理来实现。

import React, { useState } from 'react';
import './Drawer.css';

function Drawer({ children, isOpen, onClose }) {
  return (
    <div className={`drawer ${isOpen ? 'open' : ''}`}>
      <div className="drawer-content">
        <button className="close-button" onClick={onClose}>
          ×
        </button>
        {children}
      </div>
      <div className="drawer-backdrop" onClick={onClose} />
    </div>
  );
}

function App() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>Open Drawer</button>
      <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)}>
        <p>Custom Drawer Content</p>
      </Drawer>
    </div>
  );
}

export default App;

对应的 CSS 文件 Drawer.css

.drawer {
  position: fixed;
  top: 0;
  left: -100%;
  width: 300px;
  height: 100%;
  background: white;
  box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
  transition: left 0.3s ease;
  z-index: 1000;
}

.drawer.open {
  left: 0;
}

.drawer-backdrop {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  z-index: 999;
  display: none;
}

.drawer.open + .drawer-backdrop {
  display: block;
}

.close-button {
  position: absolute;
  top: 10px;
  right: 10px;
  background: none;
  border: none;
  font-size: 20px;
  cursor: pointer;
}

使用第三方动画库

如果需要更复杂的动画效果,可以结合 react-springframer-motion 等动画库。

react实现drawer

import React from 'react';
import { useSpring, animated } from 'react-spring';

function Drawer({ isOpen, children, onClose }) {
  const props = useSpring({
    transform: isOpen ? 'translateX(0%)' : 'translateX(-100%)',
  });

  return (
    <>
      <animated.div style={props} className="drawer">
        {children}
      </animated.div>
      {isOpen && <div className="backdrop" onClick={onClose} />}
    </>
  );
}

以上方法可以根据项目需求选择适合的方式实现 Drawer 功能。

标签: reactdrawer
分享给朋友:

相关文章

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…