首页 > 其他分享 >React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装

React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装

时间:2024-06-17 09:58:03浏览次数:21  
标签:styles 模态 -- TS React classNames Dialog 组件 import

文章目录


前言

今天这篇主要讲全局公共弹窗Dialog组件封装,将用到上篇封装的模态框Modal组件。有时在前台项目中,偶尔要用到一两个常用的组件,如 弹窗,其实不必非安装ant-design这些主流框架,大可自定义封装一个,而无需引入额外依赖, 提高自己的封装能力。


Dialog公共弹窗组件

1. 功能分析

(1)通用的弹框组件,用于展示一些信息或执行一些操作
(3)组件使用 Modal 组件来展示模态框,并在内部渲染了一个包含头部、内容和底部的弹框容器
(4)头部包含了标题和关闭按钮,内容显示了 children 属性,底部包含了一个按钮,用于执行确定操作
(5)组件使用了 classNames 库来合并样式类名,并且使用了 styles 模块中的样式类名来设置弹框的样式

2. 代码+详细注释

// @/components/Dialog/index.tsx
import React from "react";
import classNames from "classnames";
import styles from "./index.module.scss";
import Modal from "@/components/Modal";
import Button from "@/components/Button";

// 定义组件的Props类型
type Props = {
  // 是否显示模态框
  show: boolean;
  // 模态框标题
  title: string;
  // 模态框内容
  children: React.ReactNode;
  // 确定按钮文本
  doneText: string;
  // 点击确定按钮的回调函数
  onDoneClick: () => void;
  // 点击关闭按钮的回调函数
  onClose: () => void;
  // 可选的自定义类名
  className?: string;
};

// 定义一个函数组件,用于展示通用的模态框组件
export default (props: Props) => {
  // 解构Props对象中的属性
  const { title, show, onClose, children, className, doneText, onDoneClick } = props;
  // 返回一个包含模态框的JSX元素
  return (
    <Modal show={show} onClose={onClose}>
      {/* 模态框容器 */}
      <div className={classNames(styles.modalContainer, className)}>
        {/* 模态框头部 */}
        <div className={classNames(styles.modalHead)}>
          <span className={classNames(styles.modalTitle)}>{title}</span>
          <i className={`${classNames(styles.modalClose)} iconfont icon-close`} onClick={onClose}></i>
        </div>
        {/* 模态框内容 */}
        <div className={classNames(styles.modalContent)}>{children}</div>
        {/* 模态框底部 */}
        <div className={classNames(styles.modalFooter)}>
          {/* 确定按钮 */}
          <Button text={doneText} onClick={onDoneClick}></Button>
        </div>
      </div>
    </Modal>
  );
};
------------------------------------------------------------------------------
// @/components/Dialog/index.module.scss
.modalContainer {
  padding: 20px;
  .modalHead {
    display: flex;
    align-items: center;
    width: 200px;
    background: #ffffff;
    border-radius: 8px 8px 0 0;
    position: relative;
    .modalTitle {
      color: rgba(0, 0, 0, 0.88);
      font-weight: 600;
      font-size: 16px;
      word-wrap: break-word;
    }
    .modalClose {
      position: absolute;
      right: -6px;
      font-size: 24px;
      color: rgba(0, 0, 0, 0.75);
      cursor: pointer;
    }
  }
  .modalContent {
    padding: 40px 0;
    font-size: 14px;
    word-wrap: break-word;
  }
}

3. 使用方式

// 引入组件
import Dialog from "@/pages/components/commonDialog";
// 使用
<Dialog title="切换语言" doneText="确定" show={languageModalVisible} onClose={handlerSwitchLanguage} onDoneClick={handlerSwitchLanguage}>
  <div style={{ padding: "20px" }}>这是一个公共弹框</div>
</Dialog>

4. 效果展示

在这里插入图片描述


总结

下一篇讲【全局常用组件Text封装】。关注本栏目,将实时更新。

标签:styles,模态,--,TS,React,classNames,Dialog,组件,import
From: https://blog.csdn.net/weixin_43883615/article/details/139590530

相关文章

  • Bean生命周期
    目录一、bean生命周期基本流程二、流程细节1、初始化方法和销毁方法1)自定义式:2)接口式3)声明式4)执行顺序2、InstantiationAwareBeanPostProcessor实例化后置处理器2、BeanPostProcessor初始化后置处理器3、xxxAware接口三、总结执行流程一、bean生命周期基本流程......
  • kafka常用命令(详细)
    目录一、KAFKA启停命令1.前台启动2.后台启动3.停止命令二、Topic 相关命令2.1.创建Topic2.2.查询Topic列表2.3.查询Topic详情2.4.增加Topic的partition数2.5.查看topic指定分区offset的最大值或最小值2.6.删除Topic三、消息相关命令3.1.......
  • 使用SpringBoot对接Kafka
    Kafka是什么,以及如何使用SpringBoot对接Kafka一、Kafka与流处理我们先来看看比较正式的介绍:Kafka是一种流处理平台,由LinkedIn公司创建,现在是Apache下的开源项目。Kafka通过发布/订阅机制实现消息的异步传输和处理。它具有高吞吐量、低延迟、可伸缩性和可靠性等优点,使其成为......
  • 在Linux中,什么是运维?什么是游戏运维?
    在Linux中,运维和游戏运维是两种不同的运维角色,但它们都涉及到对系统、网络和应用程序的管理、维护和优化。以下是对它们的详细解释:一、运维运维(OperationandMaintenance),通常指互联网运维,是技术部门中的一个重要组成部分,与研发、测试、系统管理共同构成互联网产品技术支撑的四......
  • awd工具安装
    fscan(漏洞扫描)下载下载地址:Releases·shadow1ng/fscan·GitHub把下载的文件放到指定文件目录里,在文件的位置打开cmd输入fscan64.exe-h192.168.1.1/24ok了接下来说说fscan的使用使用1.信息搜集:存活探测(icmp)端口扫描2.爆破功能:各类服务爆破(ss......
  • GPT-4o 只是对话式 Al 的冰山一角,背后隐藏了哪些新机会?(内含福利) | 编码人声
       「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。听友福利欢迎在小宇宙播客评论区留言,分享你对GPT-4o的看法,或者对最有潜力的对话式AI场景的预测。我们将抽出......
  • 一个开源的快速准确地将 PDF 转换为 markdown工具
    大家好,今天给大家分享的是一个开源的快速准确地将PDF转换为markdown工具。Marker是一款功能强大的PDF转换工具,它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文,支持所有语言的转换,并且能够去除页眉、页脚等干扰元素,格式化表格和代码块,提......
  • Dynamics CRM 365 使用FetchXml 查询数据(Query data using FetchXml )
    前言FetchXml是一种基于XML的专有查询语言,用于从Dataverse检索数据。添加引用Microsoft.CrmSdk.CoreAssembliesSystem.Configuration检索数据(Retrievedata)RetrieveMultipleusingMicrosoft.Xrm.Sdk.Query;usingMicrosoft.Xrm.Sdk;usingMicrosoft.Xrm.Tooling.C......
  • Dynamics CRM 365 使用 FetchXml 分页(Page results using FetchXml)
    介绍可以通过设置页面大小来指定对每个请求检索的行数的限制。通过使用分页,您可以检索连续的数据页,这些数据页表示符合查询条件的所有记录。默认和最大页面大小为5,000行。如果不设置页面大小,Dataverse将一次返回多达5000行数据。要获得更多行,必须发送额外的请求。不要将fetch......
  • Dynamics CRM 365 使用 FetchXml 聚合数据(Aggregate data using FetchXml)
    前言FetchXML包括分组和聚合功能,可用于计算多行数据的总和、平均值、最小值、最大值和计数。若要返回聚合值,必须:将aggregate设置为true。为每个属性元素设置别名alias属性。将每个属性元素的aggregate属性设置为以下聚合函数之一:函数返回值avg包含数据的......