一个帮助简化 antd Modal 状态管理的工具

2024-03-22 12:28

本文主要是介绍一个帮助简化 antd Modal 状态管理的工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个帮助简化 antd Modal 状态管理的工具

安装

pnpm add @cicara/better-modal

使用方式

  1. 以常规方式创建 Antd 模态,唯一不同的是使用 useModalContext 自动管理Modal的状态。

    import { Input, Modal } from "antd";
    import { useModalContext } from "@cicara/better-modal";
    import { Form } from "antd";
    import { useCallback, useEffect } from "react";export type MyModalProps = {value?: string;
    };export function MyModal(props: MyModalProps) {const modal = useModalContext<string>(); // <- First use modal contextconst [form] = Form.useForm();const handleSubmit = useCallback((values: { name: string }) => {modal.resolve(values.name); // <- Close the modal and return the data or message},[modal.resolve]);useEffect(() => {if (!modal.visible) {return;}form.setFieldsValue({ name: props.value });}, [props.value]);return (<Modalopen={modal.visible}title="What's your name?"onOk={() => form.submit()}onCancel={() => modal.reject(new Error("user cancel"))} // <- Close modal with reject and reasonafterClose={modal.destroy} // Optional, destroy the modal><Form form={form} onFinish={handleSubmit} autoComplete="off"><Form.Item name="name" rules={[{ required: true }]}><Input placeholder="your name..." /></Form.Item></Form></Modal>);
    }

  2. 使用 useModal<string>(MyModal) React Hook 创建 Modal,并在合适的位置插入 {myModal.placeholder} 以便 Modal 能正确获取上下文。

    import { useModal } from "@cicara/better-modal";
    import { MyModal } from "./my-modal";export function App() {const myModal = useModal(MyModal);return <div>{myModal.placeholder}</div>;
    }

  3. 使用myModal.show函数显示 Modal 并传递参数,show函数返回一个 Promise,它对应于useModalContext中的resolvereject函数。

    import { Button } from "antd";
    import { useModal } from "@cicara/better-modal";
    import { MyModal } from "./my-modal";
    import { useCallback } from "react";export function App() {const myModal = useModal(MyModal);const handleOpenModal = useCallback(async () => {try {const result = await myModal.show<string>({ value: "hungtcs" });alert(result);} catch (err) {alert(err);}}, []);return (<div><Button onClick={handleOpenModal}>Open Modal</Button>{myModal.placeholder}</div>);
    }

    技术前沿拓展

    前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

    介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

    这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

    看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

这篇关于一个帮助简化 antd Modal 状态管理的工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835290

相关文章

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Prometheus+cpolar如何在手机上也能监控服务器状态?

《Prometheus+cpolar如何在手机上也能监控服务器状态?》本文强调了通过Cpolar这一内网穿透工具,轻松突破Prometheus仅限于局域网访问的限制,实现外网随时随地访问监控数据,教你... 目录前言1.安装prometheus2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl