React中几种编写弹窗的方式

news2025/2/14 4:19:32

方式一:按钮与弹窗封装成一个组件

将按钮和弹窗封装成一个组件,可以大大提高 React 代码的可重用性、可维护性和可扩展性。以下是示例代码:

import React, { useState } from "react";
import { Button, Modal } from "antd";

const MixWay = (props) => {
  const [visiable, setVisiable] = useState(false);

  const onOk = () => {
    console.log("编写自己的onOk逻辑");
    closeModal();
  };

  const closeModal = () => {
    setVisiable(false);
  };

  return (
    <>
      <Button onClick={() => setVisiable(true)}>按钮+弹窗</Button>
      <Modal
        title="按钮+弹窗"
        open={visiable}
        onOk={onOk}
        onCancel={closeModal}
        afterClose={closeModal}
      >
        <p>弹窗内容</p>
      </Modal>
    </>
  );
};

export default MixWay;

封装成一个组件后,我们可以轻松地复用该组件并根据需要进行扩展。

实际例子

比如下面两个回放按钮

9c1a6516ba43cee4d7893cdd1799448e.png

按钮
  • 单批次回放

35d5e48365314b7d910502725e78f9f7.png

单批次回放
  • 单接口批量回放

8465cf358b001be761f54ab6936fdc32.png

单接口批量回放

两者弹窗内容基本一致,只是单接口批量回放需要指定接口,单批回放不需要指定接口

所以将它封装成一个组件

方式二:函数式弹出弹窗

https://juejin.cn/post/7130623457993162759

https://opensource.ebay.com/nice-modal-react/#real

使用https://github.com/ebay/nice-modal-react,它帮助我们快速创建弹框,写起来更加简洁

MyModal弹窗

import React from "react";
import NiceModal, { useModal } from "@ebay/nice-modal-react";
import { Modal } from "antd";

const MyModal = NiceModal.create((props) => {
  const { name } = props;
  const modal = useModal();

  const onOk = () => {
    console.log("编写自己的onOk逻辑");
    modal.hide();
  };

  return (
    <Modal
      title="Hello Antd"
      open={modal.visible}
      onOk={onOk}
      onCancel={modal.hide}
      afterClose={modal.remove}
    >
      Greetings: {name}!
    </Modal>
  );
});

MyModal.propTypes = {};

export default MyModal;

AntdSample使用

import React from "react";
import { Button } from "antd";
import NiceModal from "@ebay/nice-modal-react";
import MyModal from "./MyModal";

const AntdSample = () => {
  return (
    <>
      <Button onClick={() => NiceModal.show(MyModal, { name: "Nate" })}>
        Show Modal
      </Button>
    </>
  );
};

export default AntdSample;

index.js

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import NiceModal from "@ebay/nice-modal-react";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <NiceModal.Provider>
      <App />
    </NiceModal.Provider>
  </React.StrictMode>
);

这段代码使用了 NiceModaluseModal,这是 eBay 开发的一个 React 组件库,能够帮助我们快速创建模态框(Modal)。使用它有以下好处:

  1. 代码简洁:NiceModal 将 Modal 的显示逻辑和 UI 逻辑封装好,我们只需要编写自己的逻辑即可。在这段代码中,我们只需要编写 MyModal 组件的内容,而不用关心 Modal 的显示和关闭逻辑。

  2. 可维护性高:使用 NiceModal,我们可以将重复的 Modal 逻辑封装成一个组件,便于统一管理和维护。下次再有类似的 Modal 需求时,我们只需要拿出这个组件进行改造即可。

  3. 可扩展性好:NiceModal 提供了一些钩子函数(例如 useModal)和配置项,可以方便地扩展自己的 Modal 组件。例如,在 MyModal 组件中使用了 useModal 钩子函数获取 modal 对象,然后就可以调用它提供的一些方法(例如 hide())来控制 Modal 的显示和关闭。

小结

以上两种编写弹窗的方式,方式二使用 nice-modal-react 更加简洁,不需要手动编写显示关闭逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django中的请求和响应

目录 请求和响应定义请求请求的样子案例常见的请求方法 django中的请求HttpRequest 常见属性 django的响应响应的内容content响应的状态码响应类型content-type常见的响应对象 请求和响应定义 请求 请求的样子案例 常见的请求方法 HTTP&#xff08;超文本传输协议&#xff09…

中国市场成为高阶智驾战略高地,博世/安波福包揽四项大奖

高工智能汽车研究院监测数据显示&#xff0c;2022年度中国市场&#xff08;不含进出口&#xff09;乘用车前装标配搭载辅助驾驶&#xff08;L0-L2&#xff09;交付1001.22万辆&#xff0c;首次突破千万辆规模&#xff0c;同时&#xff0c;前装搭载率也首次突破50%大关。 此外&a…

【数据分享】1901-2021年1km分辨率逐月总降水栅格数据(全国/分省/免费获取)

气象指标在日常研究中非常常用&#xff0c;之前我们给大家分享过来源于国家青藏高原科学数据中心提供的1901-2021年1km分辨率逐月平均气温栅格数据和1901-2021年1km分辨率的逐月最高气温栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们继续分…

建造者模式(八)

不管怎么样&#xff0c;都要继续充满着希望 上一章简单介绍了原型模式(七), 如果没有看过, 请观看上一章 一. 建造者模式 引用 菜鸟教程里面的建造者模式介绍: https://www.runoob.com/design-pattern/builder-pattern.html 建造者模式&#xff08;Builder Pattern&#xff…

企业自动化解决方案 - RPA

下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 什么是RPA&#xff1f; RPA指的是机器人流…

手势识别系统Python,基于卷积神经网络算法

一、介绍 手势识别系统&#xff0c;使用Python作为主要开发语言&#xff0c;基于深度学习TensorFlow框架&#xff0c;搭建卷积神经网络算法。并通过对数据集进行训练&#xff0c;最后得到一个识别精度较高的模型。并基于Django框架&#xff0c;开发网页端操作平台&#xff0c;…

Elasticsearch:数据摄取中的使用指南

数据摄取是利用 Elasticsearch 的全部潜力进行高效搜索和分析的关键步骤。 在本文中&#xff0c;我们将探讨几个常用的基本实践&#xff0c;以确保将无缝且有效的数据摄取到 Elasticsearch 中。 通过遵循这些指南&#xff0c;你可以优化数据摄取流程&#xff0c;并在你的部署中…

还在为618电商推送方案烦恼?我们帮你做好了!

618是每年重要的电商大促活动&#xff0c;热度高流量大&#xff0c;是电商App吸引新用户&#xff0c;提高用户转化率(购买率)的最好时机。对电商App运营来说&#xff0c;消息推送是不可忽略的流量来源之一&#xff0c;适当的消息推送可以召回用户&#xff0c;提高用户复购率。如…

Tigers Global Logistics EDI 需求及SaaS解决方案

Tigers Global Logistics 是一家国际物流公司&#xff0c;总部位于香港&#xff0c;成立于1998年。该公司提供全球物流服务&#xff0c;包括仓储、运输、海关通关、电商物流等。Tigers Global Logistics 在全球范围内拥有超过70个仓库和物流中心&#xff0c;并在美国、欧洲、亚…

Spring MVC入门笔记

Spring MVC基础知识 1. 创建web应用 新建Maven项目 点击File -> Project Structure -> Facets -> 号 -> Web 修改文件描述符路径为硬盘:\项目名\src\main\存储页面的文件夹&#xff08;如&#xff1a;webapp&#xff09;\WEB-INF\web.xml 修改Web页面路径为硬盘…

领域建模之数据模型设计方法论

本文通过实际业务需求场景建模案例&#xff0c;为读者提供一种业务模型向数据模型设计的方法论&#xff0c;用于指导实际开发中如何进行业务模型向数据模型转化抽象&#xff0c;并对设计的数据模型可用性、扩展性提供了建议性思考。通过文章&#xff0c;读者可以收获到业务模型…

打造高效采购系统,提升企业采购效率

随着市场竞争的日益激烈&#xff0c;企业采购效率的重要性越来越凸显。采购系统作为企业采购的核心环节&#xff0c;是提升采购效率的关键。因此&#xff0c;打造高效采购系统是企业发展的必要条件。本文将围绕打造高效采购系统&#xff0c;提升企业采购效率展开讨论。 一、采购…

JavaWeb小项目——【源码】使用Vue+axios+Servlet+Lombok+JDBC+MySQL技术栈实现云笔记管理系统案例的开发

目录 引出小项目要求固定的东西1.pom.xml文件配置 web.xml文件配置2.util里面JDBC的DBUtils 字符串工具StringUtils3.entity里面的PageInfo分页实体类ResData响应标准格式4.filter里面的编码CharacterEncodingFilter和权限LoginAuthorFilter5.前端固定的js包和bootstrap包 小…

深入剖析mmap原理 - 从三个关键问题说起

作者&#xff1a;招财二师兄 链接&#xff1a;https://www.jianshu.com/p/eece39beee20 来源&#xff1a;简书 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 对于mmap&#xff0c;您是否能从原理上解析以下三个问题&#xff1a; 1&#…

CentOS阿里镜像源

阿里CentOS镜像源位置&#xff1a;http://mirrors.aliyun.com/centos/?spma2c6h.25603864.0.0.50d03715CS95s4 CentOS下载最小位置&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.5e38f5advNCSXC 如图&#xff1a;

用敏捷工具Leangoo领歌做敏捷需求管理

传统的瀑布工作模式使用详细的需求说明书来表达需求&#xff0c;需求人员负责做需求调研&#xff0c;根据调研情况编制详细的需求说明书&#xff0c;进行需求评审&#xff0c;评审之后签字确认交给研发团队设计开发。在这样的环境下&#xff0c;需求文档是信息传递的主体&#…

vue H5项目如何在PC端时居中展示,而不全屏拉伸

目录 1、场景再现&#xff1a;在PC端时 H5项目布局被拉伸2、代码实现3、最终效果图4、疑惑 1、场景再现&#xff1a;在PC端时 H5项目布局被拉伸 2、代码实现 在App.vue中的写入&#xff0c;vue2 的在mounted中写入&#xff0c;vue3的写在onMounted写入。 逻辑讲解&#xff1a…

Linux之进程掩码 umask

目录 Linux之进程掩码 umask 最大权限 umask unmask作用 语法格式 参数及作用 umask存放位置 案例 示例1 --- 在shell进程中创建文件 示例2 --- 修改shell umask值&#xff08;临时&#xff09; 示例3 --- 修改shell umask值&#xff08;永久&#xff09; 示例4 ---…

机器人项目创新课题汇总提示

创新课题推荐自己思考并给出&#xff0c;如下案例仅供参考&#xff1a; 不想看&#xff0c;不愿意做&#xff0c;就遵循自己内心想法&#xff0c;做自己喜欢的事情吧。 题目和描述&#xff1a; 自动导航机器人&#xff1a;设计一种能够自主导航的机器人&#xff0c;可以在不需…

实验篇(7.2) 14. 站对站安全隧道 - 走对方宽带上网(FortiGate-IPsec) ❀ 远程访问

【简介】前面实验已经知道&#xff0c;FortiClient客户端拨号到远端防火墙&#xff0c;包括上网流量等所有流量都可以通过隧道到达远端防火墙&#xff0c;并从对方宽带上网。那么两台防火墙之间连接的安全隧道&#xff0c;可以实现这个功能吗&#xff1f; 实验要求与环境 OldMe…