当前位置:首页 > React

react实现confirm

2026-01-26 11:19:07React

实现自定义确认对话框

在React中实现自定义确认对话框可以通过状态管理和条件渲染来完成。以下是几种常见方法:

使用状态管理控制对话框显示

import React, { useState } from 'react';

function App() {
  const [showConfirm, setShowConfirm] = useState(false);
  const [action, setAction] = useState(null);

  const handleConfirm = () => {
    action && action();
    setShowConfirm(false);
  };

  const confirm = (callback) => {
    setAction(() => callback);
    setShowConfirm(true);
  };

  const deleteItem = () => {
    confirm(() => {
      console.log('Item deleted');
    });
  };

  return (
    <div>
      <button onClick={deleteItem}>Delete</button>

      {showConfirm && (
        <div className="confirm-dialog">
          <p>Are you sure?</p>
          <button onClick={handleConfirm}>Yes</button>
          <button onClick={() => setShowConfirm(false)}>No</button>
        </div>
      )}
    </div>
  );
}

使用Portal实现模态对话框

对于更专业的实现,可以使用ReactDOM.createPortal将对话框渲染到body:

import ReactDOM from 'react-dom';

function ConfirmDialog({ message, onConfirm, onCancel }) {
  return ReactDOM.createPortal(
    <div className="modal-overlay">
      <div className="modal-content">
        <p>{message}</p>
        <button onClick={onConfirm}>Confirm</button>
        <button onClick={onCancel}>Cancel</button>
      </div>
    </div>,
    document.body
  );
}

使用Context实现全局确认

通过React Context可以在任何组件中触发确认对话框:

const ConfirmContext = React.createContext();

function ConfirmProvider({ children }) {
  const [confirmState, setConfirmState] = useState(null);

  const confirm = (message) => {
    return new Promise((resolve) => {
      setConfirmState({
        message,
        resolve
      });
    });
  };

  const handleClose = (result) => {
    confirmState.resolve(result);
    setConfirmState(null);
  };

  return (
    <ConfirmContext.Provider value={confirm}>
      {children}
      {confirmState && (
        <ConfirmDialog
          message={confirmState.message}
          onConfirm={() => handleClose(true)}
          onCancel={() => handleClose(false)}
        />
      )}
    </ConfirmContext.Provider>
  );
}

使用第三方库

现有库如react-confirm-box提供了现成的解决方案:

react实现confirm

import { confirmAlert } from 'react-confirm-box';

async function handleDelete() {
  const result = await confirmAlert('Are you sure?');
  if (result) {
    // 执行删除操作
  }
}

每种方法各有优势,简单需求可使用状态管理,复杂应用推荐使用Context或第三方库方案。对话框样式可通过CSS自定义,确保符合应用设计规范。

标签: reactconfirm
分享给朋友:

相关文章

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

如何改造react

如何改造react

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

如何创建react

如何创建react

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

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…