使Popconfirm包裹的Button有loading效果

发布时间:2026/10/1 9:11:41

使Popconfirm包裹的Button有loading效果 目录Popconfirm 两种写法完整对比方式1onConfirm{this.save} 【不包箭头函数】方式2onConfirm{() this.save()} 【箭头函数包裹】核心对比表格关键避坑重点拓展思考题加深底层理解Popconfirm 两种写法完整对比目标需求点击Popconfirm组件的弹窗里的【是】外层Button展示loading核心底层常识先记住Popconfirm 原生自动loading 只控制弹窗内部的「是」按钮永远无法自动控制外层包裹的Button。外层Button loading 只能依靠 state 手动管控。方式1onConfirm{this.save} 【不包箭头函数】代码示例render() { return ( Popconfirm title是否确定保存? onConfirm{this.save} okText是 cancelText否 Button loading{this.state.saveLoading}保存/Button /Popconfirm ) } save async () { if (this.state.saveLoading) return; this.setState({ saveLoading: true }); try { await saveApi(); message.success(保存成功); } catch (err) { message.error(保存失败); } finally { this.setState({ saveLoading: false }); } };执行机制解读onConfirm{this.save}组件调用 this.save()接收函数返回的Promise✅ 弹窗内【是】按钮自动拥有loadingantd原生能力✅ 外层Button依靠我们代码里 saveLoading 手动控制loading✅ 现象弹窗的确认按钮转圈 外层保存按钮同时转圈✅ 优点同时两套loading代码简洁没有多余箭头包裹⚠️ 缺点视觉上两个地方同时转圈部分产品UI不希望出现这种效果。方式2onConfirm{() this.save()} 【箭头函数包裹】代码示例render() { return ( Popconfirm title是否确定保存? onConfirm{() this.save()} okText是 cancelText否 Button loading{this.state.saveLoading}保存/Button /Popconfirm ) } // 和上面完全一致 save async () { if (this.state.saveLoading) return; this.setState({ saveLoading: true }); try { await saveApi(); message.success(保存成功); } catch (err) { message.error(保存失败); } finally { this.setState({ saveLoading: false }); } };执行机制解读// 等价理解onConfirm () {this.save();// 没有return返回值undefined}Popconfirm 执行箭头函数拿到返回值 undefined❌ 弹窗内【是】按钮不会自动出现loading✅ 外层Button依旧依靠 saveLoading 正常展示loading✅ 现象只有外层Button转圈弹窗内部确认按钮无loading 这是你当前业务想要的效果如果想让箭头函数写法同时开启弹窗loading拓展必须手动return Promise极少场景使用onConfirm{() { return this.save(); }}核心对比表格// ✅方案A大括号不return Promise弹窗按钮不loading推荐你的业务 onConfirm{(){ this.toSubmit() }} // ❌方案B无大括号隐式return Promise弹窗内部按钮转圈双重loading onConfirm{() this.toSubmit() } // ❌方案C手动return同样弹窗按钮转圈 onConfirm{() { return this.toSubmit() }}关键避坑重点无论哪种写法外层Button loading都不能自动生效必须手动维护state finally很多人误以为不传箭头函数就能自动控制外层按钮这是重大误区。不要忘记防重复点击判断if (this.state.saveLoading) return;finally必不可少防止接口异常导致按钮永久loading最终业务推荐你的需求只想要外层按钮loading直接使用箭头函数包裹方案踩坑点async 直接写 onConfirm 上// 也会弹窗按钮loading因为async函数一定返回Promise onConfirm{async (){ await this.toSubmit() }}哪怕你写了大括号只要是 async (){}函数本身返回 PromisePopconfirm 拿到 Promise弹窗按钮开启 loading。如果你不想弹窗 loading不要把 async 写在 onConfirm 外层async 放到内部 toSubmit 函数里面。拓展思考题加深底层理解Popconfirm onConfirm {} 大括号有无loading 表现不一样完整解析//写法1带大括号 onConfirm{() { this.toSubmit(); }} //写法2不带大括号 onConfirm{() this.toSubmit()}现象写法 1{}Popconfirm 内部确认按钮不会转圈只有外部 Button 自己 loading ✅我们想要的写法 2 无{}Popconfirm 弹窗里面的确认按钮会出现 loading 转圈双重 loading不想要箭头函数规则() { 代码 }大括号代表函数体代码块不会自动 return。如果你不手动写 return函数返回undefined() expr没有大括号是隐式返回表达式结果会自动把表达式的返回值 return 出去。问如果我写成 onConfirm{()this.save()}但是save没有async/await会影响外层loading吗答不会外层loading完全由 setState 控制和是否返回Promise无关。是否返回Promise 只影响弹窗内部确认按钮loading和外层Button毫无关系。async 函数永远返回 Promise
延伸阅读

更多相关文章

2026/10/1 9:11:41

LaTeX 安装配置指南:TeX Live、VSCode 与中文排版实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 9:11:41

App推送机制全解析:从APNs到厂商通道的实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 9:11:41

交比不变性:射影几何核心原理与计算机视觉应用实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 10:11:44

TIA Portal工程方法论:从博图安装到PROFINET通讯全解析

1. 这不是一款“装上就能用”的软件,而是一套工业自动化工程方法论的数字载体西门子博图软件——准确说是TIA Portal(Totally Integrated Automation Portal),它根本不是传统意义上“点开就编程”的PLC开发工具。我带过几十个从电…

2026/10/1 10:11:44

Double Commander 双栏文件管理:把 F5/F6 用到极致

Double Commander 双栏文件管理器实战:批量重命名与压缩包即文件夹 文件整理的效率差距不在手速,在工具形态:资源管理器一窗一地来回切,双栏管理器"左栏看、右栏放"一步到位。Double Commander(开源 GPL-2&…

2026/10/1 10:11:44

核心语法-流程控制语句

一、条件判断1、if语句基本格式相关代码2、if进阶(if-else)3、if进阶(if elif else)elif在整个结构中可以出现多次4 、if的嵌套同一套if else 要保证缩进相同二、模式匹配三、循环1 、while循环2、 for循环案例:如何获取指定范围的数据集?使用range语句相…

2026/10/1 10:11:44

Editor打包系统架构设计:声明式打包与模块化编辑器构建实践

1. 从“Editor打包系统”说起:这个架构到底在解决什么问题第一次接触“Editor打包系统”这个概念,很多人会下意识地把它和某个具体的编辑器软件绑定在一起,比如代码编辑器、图像编辑器或者游戏编辑器。但如果你真的在项目里做过编辑器相关的工…

2026/10/1 10:06:44

Android dumpsys 原理与实战:系统服务调试与性能排查

1. 先弄清 dumpsys 到底解决哪一类问题如果你在 Android 开发或系统维护这条线上待过一段时间,dumpsys这个名字大概率会出现在某个焦头烂额的时刻:应用莫名其妙被杀、界面卡成幻灯片、电量一晚上掉 30%、某个服务卡死不响应,logcat里翻来翻去…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑