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

React18-完成弹窗封装

弹框封装

用法

// 创建
userRef.current?.open('create')
// 修改
userRef.current?.open('edit',values){/* 创建用户 */}
<CreateUser mRef={userRef} update={} />

组件暴露open方法

文档地址:https://react.dev/reference/react/useImperativeHandle

useImperativeHandle(ref, createHandle, dependencies?)
方法一:ref + forwardRef + useImperativeHandle
// 父组件 OrderList
import React, { useEffect, useRef, useState } from 'react'export default () => {const userRef = useRef()const handleOpen = () => {userRef.current?.open()}return <CreateUser ref={userRef} />
}// 子组件 CreateUser
const CreateUser = forwardRef((props: IProp, ref: any) => {// 组件内部完成显隐const [visible, setVisible] = useState(false)// 暴露 open 方法给父组件调用useImperativeHandle(ref, () => ({open: () => {setVisible(true)}}))return (<Modaltitle="新增用户"width={800}open={visible}okText="确定"cancelText="取消"onOk={handleOk}onCancel={handleCancel}>...此处省略...</Modal>
})

forwardRef官方解释:https://zh-hans.reactjs.org/docs/react-api.html#reactforwardref

方法二:自定义属性 + useImperativeHandle
// 父组件 OrderList
import React, { useEffect, useRef, useState } from 'react'export default () => {const userRef = useRef()const handleOpen = () => {userRef.current?.open()}return <CreateOrder userRef={userRef} />
}// 子组件 CreateOrder
interface IProp {userRef: MutableRefObject<{ open: () => void } | undefined>
}
const CreateUser = (props: IProp) => {const [visible, setVisible] = useState(false)useImperativeHandle(props.userRef, () => ({open: () => {setVisible(true)}}))return (<Modaltitle="新增用户"width={800}open={visible}okText="确定"cancelText="取消"onOk={handleOk}onCancel={handleCancel}>...此处省略...</Modal>)
}

这种方式注意, 组件上面的属性不可以定义ref,需要自定义其它属性。

类型定义

import { MutableRefObject } from 'react'// 操作类型
export type IAction = 'create' | 'edit' | 'delete'// 弹框组件属性类型
export interface IModalProp {mRef: MutableRefObject<{ open: (type: IAction) => void } | undefined>update: () => void
}

开发弹窗功能

  1. 定义弹框表单
export interface CreateParams {userName: stringuserEmail: stringmobile?: numberjob?: stringstate?: numberroleList?: string[]deptId?: string[]userImg: string
}
  1. 添加表单验证
// 用户名称、userEmail和部门是必填
<Form.Itemname="userEmail"label="邮箱"rules={[{required: true,message: '请输入邮箱'}]}
><Input placeholder="请输入邮箱:xxx@mars.com" />
</Form.Item>// 提交时验证
const valid = await form.validateFields()
  1. 定义弹框
<Modaltitle={action === 'create' ? '新增用户' : '编辑用户'}width={800}open={visible}okText="确定"cancelText="取消"onOk={handleOk}onCancel={handleCancel}
>......
</Modal>

相关接口

  1. 部门列表

  2. 角色列表

等后面讲解完部门和角色以后,再过来把用户列表完善。
具体也需要结合AntD文档参考

相关文章:

React18-完成弹窗封装

弹框封装 用法 // 创建 userRef.current?.open(create) // 修改 userRef.current?.open(edit,values){/* 创建用户 */} <CreateUser mRef{userRef} update{} />组件暴露open方法 文档地址&#xff1a;https://react.dev/reference/react/useImperativeHandle useIm…...

蓝桥杯2024/1/31-----底层测试模板

和之前一样建好工程文件夹&#xff0c;里边包含User&#xff08;放工程文件&#xff0c;mian.c&#xff09;、Driver&#xff08;存放底层文件如Led.c&#xff0c;Led.h等&#xff09; 新建的工程先搭建框架&#xff0c;可以先书写底层函数&#xff08;此次书写了四个函数并包含…...

蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的理解注释 1 题目描述 给定两个非负整数&#xff08;不含前导 00&#xff09; A 和 B&#xff0c;请你计算 AB 的值。 输入格式 共两行&#xff0c;第一行包含整数 A&a…...

C++设计模式-里氏替换原则

里氏替换原则定义了继承规范。&#xff08;封装、继承、多态&#xff09; 定义1&#xff1a;类型S对象o1&#xff0c;类型T对象o2&#xff0c;o1换成o2时程序意图不变&#xff0c;那么S是T的子类。 定义2&#xff1a;使用子类不破坏父类的意图。 注意&#xff1a;如果子类不…...

compose LazyColumn + items没有自动刷新问题

val dataLists by remember { mutableStateOf(datas) } 数据更改后列表不刷新问题。 val dataLists by remember { mutableStateOf(datas) } LazyColumn(modifier Modifier.padding(top 5.dp)) {items(dataLists) {....}} 可以将mutableStateOf 改为mutableStateListOf解决…...

Java八大常用排序算法

1冒泡排序 对于冒泡排序相信我们都比较熟悉了&#xff0c;其核心思想就是相邻元素两两比较&#xff0c;把较大的元素放到后面&#xff0c;在一轮比较完成之后&#xff0c;最大的元素就位于最后一个位置了&#xff0c;就好像是气泡&#xff0c;慢慢的浮出了水面一样 Jave 实现 …...

编程笔记 html5cssjs 075 Javascript 常量和变量

编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例&#xff1a;小结&#xff1a; 在JavaScript中&#xff0c;变量和常量是用来存储数据的占位符。它们的主要区别在于可变性&#xff1a;变量的值可以改变&#xff0c;而…...

题目 1159: 偶数求和

题目描述: 有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff08;公差为2的等差数列&#xff09;&#xff0c;现在要求你按照顺序每m个数求出一个平均值&#xff0c;如果最后不足m个&#xff0c;则以实际数量求平均值。编程输出该平均值序…...

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮&#xff0c;再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是&#xff0c;首先灯是在第一个时钟周期保持高电平熄灭状态&#xff0c;在第二个时钟周期保持1/1…...

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库&#xff0c;服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...

虚幻UE 特效-Niagara特效实战-魔法阵

回顾Niagara特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他四篇实战&#xff1a;UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...

你在做绩效考核,还是绩效管理?二者有什么区别

绩效考核&#xff0c;为什么99%都失败&#xff0c;最后一地鸡毛&#xff1f;败在指标&#xff01; 绩效管理&#xff0c;为什么大多数企业都能成功&#xff0c;而且越做越好&#xff1f;成在目标&#xff01; 丢掉层层指标&#xff0c;人人制定目标&#xff0c;这是企业重新定…...

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…...

【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础1&#xff08;网络框架&#xff09; 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点&#xff1a;网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…...

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…...

学习MySQL的MyISAM存储引擎

学习MySQL的MyISAM存储引擎 MySQL的MyISAM存储引擎是MySQL早期版本中默认的存储引擎&#xff0c;后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性&#xff0c;如事务处理、行级锁定和外键支持&#xff0c;MyISAM仍然因其简单性、高性能以及对全文搜索的支持而被广…...

nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…...

wan2.1-vae高性能部署:TensorRT优化+FP16量化提速与显存占用实测

wan2.1-vae高性能部署&#xff1a;TensorRT优化FP16量化提速与显存占用实测 1. 项目背景与价值 wan2.1-vae是基于Qwen-Image-2512模型构建的高性能图像生成平台&#xff0c;在实际应用中面临两个核心挑战&#xff1a; 生成高分辨率图像时推理速度慢&#xff08;单张2048x204…...

Qwen3.5-27B镜像合规审计:GDPR/等保2.0/数据出境安全评估要点

Qwen3.5-27B镜像合规审计&#xff1a;GDPR/等保2.0/数据出境安全评估要点 1. 模型与部署概述 Qwen3.5-27B是Qwen官方发布的视觉多模态理解模型&#xff0c;支持文本对话与图片理解功能。本镜像已在4 x RTX 4090 D 24GB环境完成部署&#xff0c;提供中文Web对话界面、流式文本…...

【TypeScript】 在业务项目中的类型治理

TypeScript 在业务项目中的类型治理&#xff1a;重点不是写类型&#xff0c;而是少挖坑 一、很多团队用了 TypeScript&#xff0c;为什么还是经常出问题 很多项目上了 TypeScript 之后&#xff0c;表面看起来挺规范&#xff1a; 接口有类型组件参数有类型函数入参也有类型 但实…...

FireRedASR Pro代码详解:从音频预处理到文本后处理全流程

FireRedASR Pro代码详解&#xff1a;从音频预处理到文本后处理全流程 1. 引言 如果你对语音识别感兴趣&#xff0c;想知道一段音频是怎么变成文字的&#xff0c;那么这篇文章就是为你准备的。我们这次不聊怎么用现成的工具&#xff0c;而是直接打开一个叫FireRedASR Pro的语音…...

gte-base-zh开发者实操手册:launch_model_server.py脚本深度解析

gte-base-zh开发者实操手册&#xff1a;launch_model_server.py脚本深度解析 如果你正在寻找一个强大的中文文本嵌入模型&#xff0c;并且希望快速部署一个可用的服务&#xff0c;那么gte-base-zh结合Xinference的方案&#xff0c;绝对值得你花时间研究。今天&#xff0c;我们…...

React Native Interactable终极指南:TouchesInside与静态交互对比详解

React Native Interactable终极指南&#xff1a;TouchesInside与静态交互对比详解 【免费下载链接】react-native-interactable Experimental implementation of high performance interactable views in React Native 项目地址: https://gitcode.com/gh_mirrors/re/react-na…...

全栈开发者工具链:OpenClaw+Qwen3.5-9B-AWQ-4bit辅助前端调试

全栈开发者工具链&#xff1a;OpenClawQwen3.5-9B-AWQ-4bit辅助前端调试 1. 为什么需要AI辅助前端调试 作为全栈开发者&#xff0c;我经常陷入这样的困境&#xff1a;当页面渲染出现异常时&#xff0c;需要在控制台日志、网络请求和DOM树之间反复切换排查。传统调试流程至少包…...

微信小程序地图气泡实战:从callout到customCallout的性能与兼容性深度解析

1. 微信小程序地图气泡的核心需求解析 第一次接触微信小程序地图气泡需求时&#xff0c;我也被各种技术方案搞得晕头转向。经过多个项目的实战验证&#xff0c;我发现开发者最常遇到的三大核心问题就是&#xff1a;内容复杂度、性能瓶颈和跨平台兼容性。比如在电商小程序中&…...

量子密钥分发系统的工程实现(四):后处理流程与FPGA硬件加速剖析

1. QKD后处理流程的核心挑战 量子密钥分发&#xff08;QKD&#xff09;系统的后处理流程就像是一场精密的"密钥提纯"手术。想象一下Alice和Bob通过量子信道传递的原始密钥&#xff0c;就像刚从矿场挖出的原石——含有大量杂质&#xff08;误码&#xff09;、存在形状…...

OpenClaw多模型对比:Qwen3.5-9B与Llama3本地接口性能实测

OpenClaw多模型对比&#xff1a;Qwen3.5-9B与Llama3本地接口性能实测 1. 测试背景与实验设计 去年在搭建个人自动化工作流时&#xff0c;我尝试用OpenClaw对接了多个开源大模型。当需要处理不同复杂度任务时&#xff0c;发现模型选择会显著影响最终效果。这次我决定用相同硬件…...