尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

react 表单管理

react 表单管理
📅 发布时间:2026/6/22 3:05:53

受控模式

import _ from 'lodash';
import cn from '@/utils/cn';
import * as api from '../api';
import { useState } from 'react';
import { match } from 'ts-pattern';type SubmitResult = { type: 'idle' | 'success' | 'error'; data: string };
type FormDataState = { uname: string; comment: string };const initDate = {submitResult: { type: 'idle', data: '' },formData: { uname: '', comment: '' },
};// React 18实现(受控来管理"表单")
export default function formDemo() {const [isPending, setIsPending] = useState(false);const [submitResult, setSubmitResult] = useState<SubmitResult>(_.cloneDeep(initDate.submitResult));const [formData, setFormData] = useState<FormDataState>(_.cloneDeep(initDate.formData));// 提交操作const handleSubmit = async () => {setIsPending(true);const finalFormData = new FormData();Object.entries(formData).forEach(([key, value]) => {finalFormData.append(key, value);});const res = await api.submitComment(finalFormData);setSubmitResult({ type: res.code === 0 ? 'success' : 'error', data: res.msg });setIsPending(false);};// 重置操作const handleReset = () => {setFormData(_.cloneDeep(initDate.formData));setSubmitResult(_.cloneDeep(initDate.submitResult));};return (<div className="w-auto"><div className={cn('flex flex-col gap-2', { 'opacity-50': isPending })}><div><label>昵称:</label><input name="uname" value={formData.uname} onChange={(e) => setFormData({ ...formData, uname: e.target.value })} className="border rounded px-2" /></div><div><label>评论:</label><input name="comment" value={formData.comment} onChange={(e) => setFormData({ ...formData, comment: e.target.value })} className="border rounded px-2" /></div><div className="flex gap-2"><button className="bg-blue-400 text-white px-2 rounded w-20 p-1" onClick={handleSubmit}>发表</button><button className="bg-red-400 text-white px-2 rounded w-20 p-1" onClick={handleReset}>重置</button></div></div><hr className="my-2" />{match(isPending).with(true, () => <span className="text-yellow-400 text-xs">提交中...</span>).otherwise(() =>match(submitResult.type).with('error', () => <span className="text-red-400 text-xs">{submitResult.data}</span>).with('success', () => <span className="text-green-400 text-xs">{submitResult.data}</span>).otherwise(() => null),)}</div>);
}

相关新闻

  • 2025 年 11 月靶材厂家推荐排行榜,溅射/磁控溅射/旋转靶材,ITO/半导体/光学镀膜,陶瓷/金属/钛/铝/铜/钨/钼/钽/硅/合金/稀土靶材公司推荐
  • 2025 年 11 月滚珠花键厂家推荐排行榜,圆筒形滚珠花键,法兰型滚珠花键,新型滚珠花键公司推荐,专业选型与高效传动解决方案
  • MyEMS:数据驱动的全生命周期能源管控系统,开启智能赋能双碳新时代

最新新闻

  • MPC56x Nexus调试实战:从READI模块配置到复杂时序问题定位
  • Prompt Caching原理与生产级落地实战指南
  • Java调用Google搜索的原理与安全实践
  • HYPERHEURIST框架:融合模拟退火与LLM的RTL硬件设计优化新范式
  • 基于LCU API的英雄联盟客户端工具包技术深度剖析:5大创新架构设计
  • 大语言模型在法律文本简化中的评测与优化实践

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号