React实现点击按钮后禁用、后端响应后恢复的方案问询
React表单防重复提交:Save按钮禁用实现方案
核心思路
- 用React的
useState钩子维护按钮的禁用状态 - 点击Save按钮后立即禁用按钮,避免重复点击触发后端接口
- 后端请求完成(无论成功/失败)后,恢复按钮可用状态
具体代码实现
假设你的CustomButton组件支持disabled、onClick和label属性,先给出组件示例(如果你的组件已有这些属性,可直接跳过):
// CustomButton.jsx const CustomButton = ({ label, disabled, onClick }) => { return ( <button type="button" disabled={disabled} onClick={onClick} // 保留你原有的样式类名 className="custom-button" > {label} </button> ); }; export default CustomButton;
接下来是包含表单的父组件实现:
// SaveForm.jsx import { useState } from 'react'; import CustomButton from './CustomButton'; const SaveForm = () => { // 存储表单数据,根据你的实际字段调整 const [formData, setFormData] = useState({ title: '', content: '' }); // 控制按钮禁用状态:true为禁用,false为可用 const [isSaving, setIsSaving] = useState(false); // 处理表单输入变更 const handleInputChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; // 处理保存逻辑 const handleSave = async () => { // 点击后立即禁用按钮 setIsSaving(true); try { // 调用后端保存接口,替换成你的实际接口地址和请求配置 const res = await fetch('/api/submit-form', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (!res.ok) throw new Error('保存请求失败'); // 保存成功后的操作,比如提示用户 alert('表单保存成功'); } catch (err) { // 保存失败的处理,比如打印错误、提示用户 console.error('保存出错:', err); alert('保存失败,请稍后重试'); } finally { // 无论请求成功还是失败,都恢复按钮可用 setIsSaving(false); } }; return ( <form> {/* 你的表单输入项,根据实际需求调整 */} <div> <label>标题:</label> <input type="text" name="title" value={formData.title} onChange={handleInputChange} /> </div> <div> <label>内容:</label> <textarea name="content" value={formData.content} onChange={handleInputChange} /> </div> {/* 使用CustomButton,传入禁用状态和点击事件 */} <CustomButton label={isSaving ? '保存中...' : 'Save'} disabled={isSaving} onClick={handleSave} /> </form> ); }; export default SaveForm;
关键说明
isSaving状态:直接绑定按钮的disabled属性,点击后立刻设为true,彻底阻止重复点击async/await + try/catch/finally:确保后端请求无论成功还是失败,最终都会把isSaving设回false,避免按钮一直处于禁用状态- 动态按钮文本:保存过程中显示“保存中...”,让用户清楚当前状态,提升体验
内容的提问来源于stack exchange,提问作者Abcd Efgh
相关产品推荐
相关产品推荐

