简化表单验证:React Hook 表单与传统方法

简化表单验证:react hook 表单与传统方法

表单验证是 web 开发的一个重要方面,可确保数据完整性并增强用户体验。在 react 生态系统中,我们看到了处理表单及其验证方式的重大演变。

在本博客中,我们将比较两种方法:传统表单验证和现代 react hook 表单库。 通过并排检查这些方法,我们将发现为什么 react hook form 已成为许多开发人员的首选解决方案。

react 中的传统表单验证

让我们首先看看 react 中表单验证的传统方法:

import react, { usestate } from "react";const simpleform = () => {  const [formdata, setformdata] = usestate({    firstname: "",    lastname: "",    email: "",    password: "",    // ... other fields  });  const [errors, seterrors] = usestate({});  const [issubmitting, setissubmitting] = usestate(false);  const handlechange = (e) => {    const { name, value } = e.target;    setformdata({      ...formdata,      [name]: value,    });  };  const handlesubmit = (e) => {    e.preventdefault();    setissubmitting(true);    const newerrors = {};    // validation logic    if (!formdata.firstname) newerrors.firstname = "first name is required";    if (!formdata.lastname) newerrors.lastname = "last name is required";    if (!formdata.email.match(/^s+@s+$/i)) newerrors.email = "invalid email address";    if (!formdata.password.match(/^(?=.*[a-z])(?=.*[a-z])(?=.*d)(?=.*[@$!%*?&])[a-za-zd@$!%*?&]{8,}$/)) newerrors.password = "invalid password";    // ... more validation rules    if (object.keys(newerrors).length > 0) {      seterrors(newerrors);      return;    }    // submit form data    try {      const response = await simulateapicall(formdata);      console.log("success: ", response);    } catch (error) {      console.error(error);      seterror({ root: error.message });    } finally {      setissubmitting(false)    }  };  return (                {errors.firstname && 

{errors.firstname}

} {errors.lastname &&

{errors.lastname}

} {errors.email &&

{errors.email}

} {errors.password &&

{errors.password}

} {/* more form fields */} );};

采用这种传统方法

我们使用 usestate 钩子分别管理表单状态和错误状态。 我们手动处理表单字段的更改并在handlesubmit函数中实现自定义验证逻辑。

虽然这可行,但它涉及大量样板代码,对于较大的表单可能会变得很麻烦。

输入react hook form

现在,让我们看看如何使用 react hook form 实现相同的结果:

安装

npm install react-hook-form
import React from "react";// useForm is the hook which is given by react-hook-formimport { useForm } from "react-hook-form";const ReactHookForm = () => {  const {    register,    handleSubmit,    setError,    formState: { errors, isSubmitting },  } = useForm();  const onSubmit = (data) => {    // Submit form data    try {      const response = await simulateApiCall(formData);      console.log("Success: ", response);    } catch (error) {      console.error(error);      setError({ root: error.message });    }  };  return (                {errors.firstName && 

{errors.firstName.message}

与光AI
与光AI

一站式AI视频工作流创作平台

与光AI 66
查看详情 与光AI
} {errors.lasttName &&

{errors.lasttName.message}

} {errors.email &&

{errors.email.message}

} {errors.firstName &&

{errors.firstName.message}

} {/* More form fields */} );};

react hook form 的简单性

减少样板:react hook form 消除了手动状态管理的需要。表单数据和错误不再使用 usestate。

声明式验证:我们不编写命令式验证逻辑,而是在寄存器函数中声明验证规则。这使得代码更具可读性和可维护性。

自动错误处理:react hook form 自动跟踪错误并通过错误对象提供错误,无需手动进行错误状态管理。

性能:通过利用不受控制的组件,react hook form 最大限度地减少了重新渲染,从而带来更好的性能,特别是对于大型表单。

轻松集成:注册功能与您现有的输入元素无缝集成,只需对 jsx 进行最少的更改。

内置验证:内置了常见的验证规则,如 required、min、max、pattern,减少了对自定义验证函数的需求。

typescript 支持:react hook form 提供了出色的开箱即用的 typescript 支持,增强了表单中的类型安全性。

了解如何在具有更多输入字段的打字稿中处理react-hook-form

虽然 react 中的传统表单处理为您提供了细粒度的控制,但它通常会导致难以维护的冗长代码。

react hook form 显着简化了这个过程,提供了一种更具声明性和更有效的方式来处理表单及其验证。

感谢您的阅读…希望您今天学到了新东西:)

以上就是简化表单验证:React Hook 表单与传统方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489957.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
测试 AWS AppSync JavaScript 解析器
上一篇 2025年12月19日 12:50:00
在 JavaScript 中实现 Ruby 的方法 Method
下一篇 2025年12月19日 12:50:10

相关推荐

  • Linux系统中遇到的常见网络安全漏洞及其解决办法

    linux系统作为一个广泛使用的开源操作系统,具有较高的安全性,但它并非完全免疫于网络安全漏洞。本文将介绍一些常见的linux网络安全漏洞,并提供相应的解决办法,以帮助用户有效保障linux系统的安全。 Shellshock漏洞Shellshock漏洞是一个影响Bash(Bourne Again S…

    2026年10月4日
    000
  • 幻兽帕鲁古代文明部件怎么获得 古代文明部件获取方法介绍

    幻兽帕鲁古代文明部件怎么获得 古代文明部件获取方法介绍幻兽帕鲁古代文明部件怎么获得 古代文明部件获取方法介绍幻兽帕鲁古代文明部件怎么获得 古代文明部件获取方法介绍幻兽帕鲁古代文明部件怎么获得 古代文明部件获取方法介绍

    古代文明部件是游戏中极为关键的资源,用于建造设施和打造装备,但不少玩家不清楚如何获取。实际上,这种材料可以通过挑战并击败boss级别的帕鲁来获得,方式简单且高效。 通过击败Boss级帕鲁获取 详细说明: 1、只有成功击败Boss级别的帕鲁,才有可能获得古代文明部件,即使之前已经击败过该Boss,依然…

    2026年10月4日 • 用户投稿
    100
  • 如何停止运行 MySQL 查询?

    如何停止运行 MySQL 查询?如何停止运行 MySQL 查询?如何停止运行 MySQL 查询?如何停止运行 MySQL 查询?

    在停止MySQL的运行查询之前,我们首先需要看到有多少个进程。 使用show命令运行。 查询如下所示 − mysql> show processlist; After executing the above query, we will get the output with some id’…

    2026年10月4日 • 用户投稿
    300
  • deepchat 企业 AI 应用平台增加智能体发布嵌入网站功能

    deepchat 企业 AI 应用平台增加智能体发布嵌入网站功能deepchat 企业 AI 应用平台增加智能体发布嵌入网站功能deepchat 企业 AI 应用平台增加智能体发布嵌入网站功能deepchat 企业 AI 应用平台增加智能体发布嵌入网站功能

    经过一段时间的持续开发,由单人携手AI共同打造的 deepchat 项目终于初具雏形。 项目地址:https://www.php.cn/link/1a98639f7a5974a45ccd7826ce570a18 官方网站:https://www.php.cn/link/a4db53c680ab731…

    2026年10月4日 • 用户投稿
    000
  • 夸克浏览器在线网页版打开方式 夸克浏览器登录入口链接

    夸克浏览器在线网页版打开方式 夸克浏览器登录入口链接夸克浏览器在线网页版打开方式 夸克浏览器登录入口链接夸克浏览器在线网页版打开方式 夸克浏览器登录入口链接夸克浏览器在线网页版打开方式 夸克浏览器登录入口链接

    夸克浏览器在线网页版可通过官网https://www.quark.cn/登录使用。1、主站官网支持账号登录与核心功能操作;2、AI服务入口https://ai.quark.cn/提供智能搜索与内容生成;3、移动端快捷通道https://quark.sm.cn/适配手机浏览器。平台整合浏览器、网盘与搜…

    2026年10月4日 • 用户投稿
    000
  • 告别PHP的“等待地狱”:如何使用Composer和GuzzlePromises优化异步操作,提升应用响应速度

    告别PHP的“等待地狱”:如何使用Composer和GuzzlePromises优化异步操作,提升应用响应速度告别PHP的“等待地狱”:如何使用Composer和GuzzlePromises优化异步操作,提升应用响应速度告别PHP的“等待地狱”:如何使用Composer和GuzzlePromises优化异步操作,提升应用响应速度告别PHP的“等待地狱”:如何使用Composer和GuzzlePromises优化异步操作,提升应用响应速度

    可以通过一下地址学习composer:学习地址 告别PHP的“等待地狱”:异步处理的救星 在日常的PHP项目开发中,我们经常会遇到这样的场景:一个页面或一个后台任务需要从多个外部服务获取数据。比如,你需要同时调用用户服务、商品服务和库存服务三个API,才能渲染出完整的商品详情页。如果每个API调用都…

    2026年10月4日 • 用户投稿
    000
  • 香飘飘还“飘得动”吗?

    香飘飘还“飘得动”吗?香飘飘还“飘得动”吗?香飘飘还“飘得动”吗?香飘飘还“飘得动”吗?

    作者 | 张语格 4月26日,香飘飘(603711.SH)披露了2024年报和今年一季报。 财报数据显示,2024年营收32.87亿元,同比下降9.32%;归母净利润2.53亿元,同比下降9.67%。到今年一季度,香飘飘仍未止住颓势,并出现亏损;一季度营业收入同比下降19.98%为5.8亿元,归母净…

    2026年10月4日 • 用户投稿
    000
  • 使用 JSch 从 SSH 服务器下载文件:问题排查与解决方案

    使用 JSch 从 SSH 服务器下载文件:问题排查与解决方案使用 JSch 从 SSH 服务器下载文件:问题排查与解决方案使用 JSch 从 SSH 服务器下载文件:问题排查与解决方案使用 JSch 从 SSH 服务器下载文件:问题排查与解决方案

    本文旨在帮助开发者解决在使用 JSch 客户端从 SSH 服务器下载文件时遇到的“java.net.SocketException: Connection reset”错误。文章将分析可能导致该问题的原因,并提供详细的排查步骤和解决方案,包括网络配置、权限设置、代码实现等方面的注意事项。 问题分析:…

    2026年10月4日 • 用户投稿
    100
  • win10怎么查看系统启动时间 win10查看电脑本次开机启动时长的方法

    win10怎么查看系统启动时间 win10查看电脑本次开机启动时长的方法win10怎么查看系统启动时间 win10查看电脑本次开机启动时长的方法win10怎么查看系统启动时间 win10查看电脑本次开机启动时长的方法win10怎么查看系统启动时间 win10查看电脑本次开机启动时长的方法

    可通过任务管理器性能选项卡查看CPU正常运行时间;2. 使用命令提示符执行systeminfo | find “启动时间”获取系统启动时刻;3. 在PowerShell中运行(Get-Date)-(Get-CimInstance Win32_OperatingSystem).…

    2026年10月4日 • 用户投稿
    100
  • Linux系统中遇到的常见磁盘读写错误和IO错误及其解决方法

    linux系统中遇到的常见磁盘读写错误和io错误及其解决方法 在Linux系统中,磁盘读写错误和IO错误是常见的问题。这些错误可能对系统性能造成严重影响,导致文件丢失或损坏。本文将介绍一些常见的磁盘读写错误和IO错误,并提供解决方法。 磁盘读写错误磁盘读写错误指的是在从磁盘读取或写入数据时发生错误。…

    2026年10月4日
    100
  • 尊界S800一线快报:多为超豪品牌车主增购 男性占八成

    尊界S800一线快报:多为超豪品牌车主增购 男性占八成尊界S800一线快报:多为超豪品牌车主增购 男性占八成尊界S800一线快报:多为超豪品牌车主增购 男性占八成尊界S800一线快报:多为超豪品牌车主增购 男性占八成

    作为鸿蒙智行旗下售价最高、科技含量最顶尖的车型,尊界s800自发布以来便吸引了广泛关注,并在正式上市后取得了亮眼的大定成绩。6月9日晚,有汽车博主曝光了一份来自销售一线的快报,透露了部分消费者关心的关键数据。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年10月4日 • 用户投稿
    200
  • 全民生活如何锁卡

    全民生活如何锁卡全民生活如何锁卡全民生活如何锁卡全民生活如何锁卡

    在当今数字化时代,信用卡已成为人们日常生活中不可或缺的支付方式之一。对于使用全民生活信用卡的用户而言,掌握如何进行锁卡操作,是保障账户安全的重要环节。那么,全民生活信用卡究竟该如何锁卡呢? 最便捷的方式是通过全民生活App完成锁卡。用户只需打开全民生活App并登录个人账户,在首页底部的导航栏中点击“…

    2026年10月4日 • 用户投稿
    400
  • 谷歌浏览器如何解决高CPU占用问题

    谷歌浏览器如何解决高CPU占用问题谷歌浏览器如何解决高CPU占用问题谷歌浏览器如何解决高CPU占用问题谷歌浏览器如何解决高CPU占用问题

    当谷歌浏览器占用过高的CPU资源时,会导致您的电脑整体运行速度变慢,风扇噪音增大,甚至出现卡顿。此问题通常由特定的标签页、耗费资源的扩展程序或浏览器缓存积累所引起。本文将引导您使用浏览器内置的工具来精确定位问题源头,并提供一系列优化措施,以有效降低CPU占用,恢复流畅的浏览体验。 使用浏览器任务管理…

    2026年10月4日 • 用户投稿
    100
  • 蚂蚁集团百灵团队正式开源 Ling-mini-2.0

    蚂蚁集团百灵团队正式开源 Ling-mini-2.0蚂蚁集团百灵团队正式开源 Ling-mini-2.0蚂蚁集团百灵团队正式开源 Ling-mini-2.0蚂蚁集团百灵团队正式开源 Ling-mini-2.0

    蚂蚁集团百灵团队近日正式发布了ling 2.0系列的首个开源模型——ling-mini-2.0。该模型采用创新的moe架构,激活比例仅为1/32,总参数量达16b,但在处理每个token时仅激活1.4b参数(非embedding部分为789m),实现了高效计算与性能的平衡。 Ling-mini-2.…

    2026年10月4日 • 用户投稿
    100
  • Linux系统中遇到的常见安全漏洞和攻击问题及其解决办法

    linux系统作为一种开源的操作系统,被广泛应用于互联网、服务器和嵌入式设备等领域。然而,正因为其广泛应用,也使得linux系统成为攻击者的目标。本文将介绍linux系统中常见的安全漏洞和攻击问题,并提供相应的解决办法。 一、常见的安全漏洞 未及时更新补丁和软件版本:Linux社区和开发者经常发布安…

    2026年10月4日
    000
  • 如鸢孔融有什么技能 如鸢孔融技能效果解析介绍

    如鸢孔融有什么技能 如鸢孔融技能效果解析介绍如鸢孔融有什么技能 如鸢孔融技能效果解析介绍如鸢孔融有什么技能 如鸢孔融技能效果解析介绍如鸢孔融有什么技能 如鸢孔融技能效果解析介绍

    如鸢孔融强度如何?近期不少玩家都在关注这位新上线绣衣楼卡池的水系神纪角色。作为团队中的关键辅助,孔融能够显著强化队伍的普攻流输出能力,接下来就让我们深入解析如鸢中孔融的技能机制与实战表现。 孔融的普通攻击可对敌方目标发动多段打击,具备一定的基础伤害能力。其队长技“朝闻道”则为全队提供普攻伤害加成,且…

    2026年10月4日 • 用户投稿
    000
  • 如何在Java中使用URLConnection Java发送网络请求的方式

    如何在Java中使用URLConnection Java发送网络请求的方式如何在Java中使用URLConnection Java发送网络请求的方式如何在Java中使用URLConnection Java发送网络请求的方式如何在Java中使用URLConnection Java发送网络请求的方式

    在java中发送网络请求的解决方案是使用urlconnection,其核心流程包括:1. 创建url对象;2. 打开连接;3. 设置请求方法和属性;4. 发送数据(post请求);5. 读取响应;6. 关闭资源。对于get请求,需设置请求方法为get,配置请求头、超时时间,并读取响应流;对于post…

    2026年10月4日 • 用户投稿
    000
  • composer怎么在脚本中获取根目录路径_教你在composer脚本中获取项目根目录

    composer怎么在脚本中获取根目录路径_教你在composer脚本中获取项目根目录composer怎么在脚本中获取根目录路径_教你在composer脚本中获取项目根目录composer怎么在脚本中获取根目录路径_教你在composer脚本中获取项目根目录composer怎么在脚本中获取根目录路径_教你在composer脚本中获取项目根目录

    答案:推荐使用getcwd()获取Composer脚本的项目根目录,因Composer默认在composer.json目录下执行脚本,故getcwd()通常准确;若存在符号链接等特殊环境,可优先取$_SERVER[‘PWD’]作为兜底方案。 在使用 Composer 的自定义…

    2026年10月4日 • 用户投稿
    000
  • 夸克浏览器网页版快速登录入口 夸克浏览器在线打开链接

    夸克浏览器网页版快速登录入口 夸克浏览器在线打开链接夸克浏览器网页版快速登录入口 夸克浏览器在线打开链接夸克浏览器网页版快速登录入口 夸克浏览器在线打开链接夸克浏览器网页版快速登录入口 夸克浏览器在线打开链接

    夸克浏览器网页版快速登录入口是https://www.quark.cn/,通过该链接可直接访问网页版并登录账号,支持跨设备同步收藏夹、历史记录,实现扫码登录、文件传输、剪贴板同步及标签页推送,适用于临时查阅、公共设备使用、网课辅助和PDF预览等轻量化场景。 夸克浏览器网页版快速登录入口在哪里?这是不…

    2026年10月4日 • 用户投稿
    000
  • 杰华特“电隔离结构及其制造方法与多管芯封装结构”专利公布

    杰华特“电隔离结构及其制造方法与多管芯封装结构”专利公布杰华特“电隔离结构及其制造方法与多管芯封装结构”专利公布杰华特“电隔离结构及其制造方法与多管芯封装结构”专利公布杰华特“电隔离结构及其制造方法与多管芯封装结构”专利公布

    天眼查显示,杰华特微电子股份有限公司“电隔离结构及其制造方法与多管芯封装结构”专利公布,申请公布日为2025年2月14日,申请公布号为cn119447115a。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 本发明公开了一种电隔离结构及其制…

    2026年10月4日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信