当前位置:首页 > React

react实现对话框

2026-01-27 10:01:18React

使用 React 实现对话框

使用 React 内置状态管理

创建一个简单的对话框组件,通过 useState 控制显示与隐藏。

import React, { useState } from 'react';

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

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>打开对话框</button>
      {isOpen && (
        <div className="dialog-overlay">
          <div className="dialog-content">
            <h3>对话框标题</h3>
            <p>对话框内容</p>
            <button onClick={() => setIsOpen(false)}>关闭</button>
          </div>
        </div>
      )}
    </div>
  );
}

export default Dialog;

使用 Portal 优化渲染

通过 ReactDOM.createPortal 将对话框渲染到 body 层级,避免父组件样式影响。

react实现对话框

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

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

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>打开对话框</button>
      {isOpen &&
        ReactDOM.createPortal(
          <div className="dialog-overlay">
            <div className="dialog-content">
              <h3>对话框标题</h3>
              <p>对话框内容</p>
              <button onClick={() => setIsOpen(false)}>关闭</button>
            </div>
          </div>,
          document.body
        )}
    </div>
  );
}

export default Dialog;

使用第三方库(如 Material-UI)

利用现成的对话框组件库快速实现功能。

react实现对话框

import React, { useState } from 'react';
import Button from '@material-ui/core/Button';
import Dialog from '@material-ui/core/Dialog';
import DialogTitle from '@material-ui/core/DialogTitle';
import DialogContent from '@material-ui/core/DialogContent';
import DialogActions from '@material-ui/core/DialogActions';

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

  return (
    <div>
      <Button variant="contained" color="primary" onClick={() => setIsOpen(true)}>
        打开对话框
      </Button>
      <Dialog open={isOpen} onClose={() => setIsOpen(false)}>
        <DialogTitle>对话框标题</DialogTitle>
        <DialogContent>
          <p>对话框内容</p>
        </DialogContent>
        <DialogActions>
          <Button onClick={() => setIsOpen(false)} color="primary">
            关闭
          </Button>
        </DialogActions>
      </Dialog>
    </div>
  );
}

export default MaterialDialog;

自定义动画效果

通过 CSS 或动画库(如 Framer Motion)为对话框添加动画。

import React, { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';

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

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>打开对话框</button>
      <AnimatePresence>
        {isOpen && (
          <motion.div
            className="dialog-overlay"
            initial={{ opacity: 0 }}
            animate={{ opacity: 1 }}
            exit={{ opacity: 0 }}
          >
            <motion.div
              className="dialog-content"
              initial={{ y: 50 }}
              animate={{ y: 0 }}
              exit={{ y: 50 }}
            >
              <h3>对话框标题</h3>
              <p>对话框内容</p>
              <button onClick={() => setIsOpen(false)}>关闭</button>
            </motion.div>
          </motion.div>
        )}
      </AnimatePresence>
    </div>
  );
}

export default AnimatedDialog;

对话框传参与回调

通过 props 实现对话框内容的动态传递和回调函数。

import React, { useState } from 'react';

function DynamicDialog({ title, content, onConfirm }) {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(true)}>打开对话框</button>
      {isOpen && (
        <div className="dialog-overlay">
          <div className="dialog-content">
            <h3>{title}</h3>
            <p>{content}</p>
            <button onClick={() => setIsOpen(false)}>取消</button>
            <button onClick={() => { onConfirm(); setIsOpen(false); }}>确认</button>
          </div>
        </div>
      )}
    </div>
  );
}

export default DynamicDialog;

标签: 对话框react
分享给朋友:

相关文章

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react如何卸载

react如何卸载

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

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…

react 如何算精通

react 如何算精通

精通 React 的标准 精通 React 不仅需要掌握基础语法和核心概念,还需具备解决复杂问题、优化性能和架构设计的能力。以下是衡量 React 精通程度的关键维度: 核心概念与机制 组件…

如何调试react源码

如何调试react源码

调试React源码的方法 克隆React源码仓库到本地: git clone https://github.com/facebook/react.git cd react 安装依赖并构建开发版本:…