当前位置:首页 > 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 层级,避免父组件样式影响。

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)

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

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 实现对话框内容的动态传递和回调函数。

react实现对话框

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 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react如何浮动

react如何浮动

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

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

react如何减少setState

react如何减少setState

减少 React 中 setState 调用的方法 合并多次状态更新 使用函数式更新方式合并多次 setState 调用。React 会将多次状态更新批量处理,避免不必要的重新渲染。 // 非函…

react如何重新加载

react如何重新加载

重新加载当前页面 在React中重新加载当前页面可以通过window.location.reload()方法实现。该方法会强制浏览器重新加载当前URL,类似于按下F5刷新页面。 const relo…

react如何创建框架

react如何创建框架

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