当前位置:首页 > 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提供了现成的解决方案:

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

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

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

react实现confirm

标签: reactconfirm
分享给朋友:

相关文章

react native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…