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

如何解决按钮重复点击

问题背景

在日常开发中,我们经常会遇到这样的场景:

  • 用户疯狂点击提交按钮
  • 表单重复提交导致数据异常
  • 批量操作按钮被连续触发

这些问题如果处理不当,轻则影响用户体验,重则可能造成数据错误。

解决方案

我们可以封装一个自定义 Hook

import {useState,useCallback,useRef} from 'react'function useLock(asyncFn) {const [loading, setLoading] = useState(false)const asyncFnRef = useRef(null)asyncFnRef.current = asyncFnconst run = useCallback(async (...args) => {if(loading) returnsetLoading(true)try {await asyncFnRef.current(...args)} finally {setLoading(false)}}, [loading])return [loading,run]
}

然后封装一个通用的 Button 组件

import {Button as AntButton} from 'antd'const Button = ({onClick,...props})=>{const {loading, run} = useLock(onClick || (()=> {}))return <AntButton loading={loading} {...props} onClick={run}></button>
}

使用示例

const Demo = () => {const handleSubmit = async () => {// 模拟异步请求await new Promise(resolve => setTimeout(resolve, 2000))console.log('提交成功')}return (<Button onClick={handleSubmit}>提交</Button>)
}

方案优势

  • 零侵入性 :使用方式与普通按钮完全一致
  • 自动处理 :自动管理 loading 状态,无需手动控制
http://www.xdnf.cn/news/5045.html

相关文章:

  • 第十七章,反病毒---防病毒网管
  • MOS关断时波形下降沿振荡怎么解决
  • C语言实现:打印素数、最大公约数
  • gradle3.5的安装以及配置环境变量
  • 进行性核上性麻痹饮食指南:科学膳食守护神经健康
  • OpenMagnetic的介绍与使用
  • Redis 存储原理与数据模型(三)
  • 基于RAG+MCP开发【企文小智】企业智能体
  • (强连通分量)洛谷 P2812 校园网络(加强版)题解
  • 【强化学习】强化学习算法 - 马尔可夫决策过程
  • ROS动态参数 - dynamic reconfigure 动态配置参数
  • JDK21之虚拟线程
  • 在Mathematica中加速绘制图形(LibraryLink)
  • Vue3项目中如何实现网页加载进度条。
  • 专题练习1
  • 图像移动图像归类代码
  • 仁合医疗进博会:创新成果闪耀亮相
  • [逆向工程]什么说ASLR技术(二十三)
  • 操作系统导论——第26章 并发:介绍
  • 剖析 Java 23 特性:深入探究最新功能
  • Android framework功能配置开发
  • SQL JOIN 关联条件和 where 条件的异同
  • AnyTXTSearcher电脑本地文件搜索工具
  • 深入理解 Vue 全局导航守卫:分类、作用与参数详解
  • AVL树:保持平衡的高效二叉搜索树
  • apipost快捷使用实例
  • 43.防雷击浪涌设计
  • 计算机系统结构-第九章-互联网络 第十章
  • Windows系统下【Celery任务队列】python使用celery 详解(一)
  • AIOps 工具介绍