热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hooks封装ConfirmModel弹框

1、componentsConfirmModelindex.tsximportReact,{useState,useImperativeHandle}fromreactimport

1、components/ConfirmModel/index.tsx

import React, { useState, useImperativeHandle } from 'react'
import { Modal } from
'antd'
import styles from
'./index.less'
import { ExclamationCircleFilled } from
'@ant-design/icons'
interface DeleteModelProps {
childRef
?: any
handleOk
?: (value: any) => void
handleCancel
?: (value: any) => void
text
?: string
okText
?: String
cancelText
?: String
maskClosable
?: Boolean
className
?: String
width
?: Number
isAlignment
?: Boolean
}
const DeleteModel: React.FC
= (props: any) => {
const { handleOk, childRef, text, okText, cancelText, maskClosable, className, width, isAlignment }
= props
const [isModalVisible, setIsModalVisible]
= useState(false)
const [id, setId]
= useState(-1)
const showModal
= (id?: number) => {
setId(id
|| 0)
setIsModalVisible(
true)
}
useImperativeHandle(childRef, ()
=> ({ showModal, handleClose, handleCancel }))

const handleClose
= () => {
setIsModalVisible(
false)
}
const handleCancel
= props.handleCancel ? props.handleCancel : handleClose
return (
<Modal
className
={styles.deleteModel + ' ' + `${className}`}
visible
={isModalVisible}
onOk
={() => handleOk(id)}
onCancel
={handleCancel}
centered
closable
={false}
width
={width ? width : 360}
okText
={okText || '确认'}
cancelText
={cancelText || '取消'}
maskClosable
={maskClosable} // 默认点击蒙层可以关闭,传maskClosable={false}时点击蒙层不可关闭
>



提示


{text ? text : '是否确认删除该条数据,此操作不可恢复!'}


)
}
export
default DeleteModel

  index.less

:global {
.ant-modal-mask,
.ant-modal-wrap {
z-index
: 1030 !important; // 保证【删除确认弹框】在Popover弹层之上
}
}
.deleteModel
{
h2 {
display
: flex;
align-items
: center;
justify-content
: center;
margin-bottom
: 40px;
:global(.anticon) {
margin-right: 10px
;
color
: #416eff;
}
> span
{
color
: var(--theme-text-color);
font-size
: 24px;
}
}
.modelMain
{
margin-bottom
: 0;
color
: var(--theme-text-color);
font-size
: 16px;
line-height
: 24px;
text-align
: center;
}
.alignment
{
display
: flex;
justify-items
: center;
text-align
: start;
}
:global
{
// .ant-modal {
.ant-modal-content {
padding
: 30px 0;
.ant-modal-body {
padding
: 0 20px;
}
.ant-modal-footer
{
margin-top
: 40px;
padding
: 0;
text-align
: center;
border-top
: 0;
.ant-btn {
width
: 92px;
height
: 32px;
color
: #373a44;
color
: rgba(55, 58, 68, 0.5);
font-size
: 16px;
line-height
: 1;
border
: 1px solid #dde6f7;
border-radius
: 4px;
box-shadow
: none;
}
.ant-btn-primary
{
margin-left
: 50px;
color
: rgba(255, 255, 255, 1);
}
}
}
}
// }
}

View Code

 

2、使用

import ConfirmModel from '@/components/ConfirmModel'

const deleteRef = useRef()
const handleDelete
= () => {
deleteRef.current.showModal(
5)
}
const handleDeleteOk
= async (id: number) => {
console.log(id)
deleteRef.current.handleCancel()
}

  DOM:

<div className="iconfont icon-a-shanchu1" onClick={handleDelete}>
删除
div>
<ConfirmModel childRef={deleteRef} handleOk={handleDeleteOk} />

 

3、效果

  



推荐阅读
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
wojijola;
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有