当前位置:首页 > React

react实现confirm

2026-01-26 11:19:07React

实现自定义确认对话框

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

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

react实现confirm

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:

react实现confirm

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提供了现成的解决方案:

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

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

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

标签: reactconfirm
分享给朋友:

相关文章

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react 如何引用slider

react 如何引用slider

使用 React 实现 Slider 组件 在 React 中实现 Slider 功能可以通过原生 HTML 的 <input type="range"> 或第三方库(如 react-sl…

react如何使用redux

react如何使用redux

使用 Redux 在 React 中的应用 Redux 是一个状态管理库,通常与 React 结合使用以管理全局状态。以下是具体实现步骤: 安装依赖 确保项目中已安装 redux 和 react-r…

如何退出react项目

如何退出react项目

退出 React 项目的方法 关闭开发服务器 如果正在运行开发服务器(如通过 npm start 或 yarn start),在终端中按 Ctrl + C(Windows/Linux)或 Comman…

react native如何打包

react native如何打包

打包 React Native 应用(Android) 生成 Android 发布密钥库文件(如果尚未创建): keytool -genkey -v -keystore my-release-key…