当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • Dialog公共弹窗组件
    • 1. 功能分析
    • 2. 代码+详细注释
    • 3. 使用方式
    • 4. 效果展示
  • 总结


前言

今天这篇主要讲全局公共弹窗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封装】。关注本栏目,将实时更新。

相关文章:

  • Mybatis Plus 详解 IService、BaseMapper、自动填充、分页查询功能
  • Python基础教程(二十四):日期和时间
  • 第六章 图论与网络分析 (重点,熟练掌握三算法) 树图和图的最小部分树 最短路问题 网络的最大流
  • 24年计算机等级考试22个常见问题解答❗
  • 23种设计模式之桥接模式
  • 【Unity设计模式】状态编程模式
  • Git与SSH
  • 深入了解软件设计模式:创新应用与优化代码结构
  • 【信息学奥赛】CSP-J/S初赛04 进制转换相关问题(二、八、十六进制与十进制互相转换)
  • leetcode67 二进制求和
  • Android低代码开发 - InputMenuPanelItem详解
  • 2.spring cloud gateway 源码编译
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • 表 达式树
  • 【NCBI】SRA toolkit安装及使用-WindowsLinux版本
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Brief introduction of how to 'Call, Apply and Bind'
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java基本数据类型之Number
  • JS笔记四:作用域、变量(函数)提升
  • Js基础知识(一) - 变量
  • python 装饰器(一)
  • sessionStorage和localStorage
  • 电商搜索引擎的架构设计和性能优化
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 强力优化Rancher k8s中国区的使用体验
  • 通信类
  • 以太坊客户端Geth命令参数详解
  • 1.Ext JS 建立web开发工程
  • gunicorn工作原理
  • ​2020 年大前端技术趋势解读
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (02)Unity使用在线AI大模型(调用Python)
  • (3)STL算法之搜索
  • (c语言)strcpy函数用法
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (备份) esp32 GPIO
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)uboot源码分析
  • (算法)Travel Information Center
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)VirtualBox安装增强功能
  • (转)【Hibernate总结系列】使用举例
  • (转)用.Net的File控件上传文件的解决方案
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET 发展历程
  • .Net 路由处理厉害了
  • .NET分布式缓存Memcached从入门到实战
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /proc/stat文件详解(翻译)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell