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

React-hook-form-mui(三):表单验证

前言

在上一篇文章中,我们介绍了react-hook-form-mui的基础用法。本文将着重讲解表单验证功能。
react-hook-form-mui提供了丰富的表单验证功能,可以通过validation属性来设置表单验证规则。本文将详细介绍validation的三种实现方法,以及如何与提交按钮联动。

Demo

以下是一个表单验证的 demo,我们将通过三种方法来实现表单验证:

import React from "react";
import { useForm } from "react-hook-form";
import { Button } from "@mui/material";
import { FormContainer, TextFieldElement } from "react-hook-form-mui";const URL_REGEXP =\/^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.,?+=&%@\-/]*)?$\/;export interface UserSettings {firstName: string;lastName: string;url: string;
}/*** @descpition: lastName长度验证* @param _value 当前表单元素的值*/
const validateLastNameLength = (_value: string) => {return _value.length < 2 ? "Url is invalid!" as any : Promise.resolve();
};const MyForm = () => {const formContext = useForm<UserSettings>({defaultValues: {firstName: "",lastName: "",url: ""},mode: "all" // 验证模式切换为all});const onSubmit = (data: UserSettings) => {console.log(data);};return (<FormContainerformContext={formContext}onSuccess={(data) => {onSubmit(data);}}>{/* 使用 validation 属性设置表单验证规则 */}<TextFieldElementname="firstName"label="First Name"validation={{required: "First Name is required!"}}/><TextFieldElementname="lastName"label="First Name"validation={{validate: validateLastNameLength}}/><TextFieldElementname="url"label="Url"/><Buttontype="submit"<Buttontype="submit"// 当表单所有元素都验证通过并且表单元素发生过改变后,可以点击提交按钮disabled={!formContext.formState.isValid || !formContext.formState.isDirty}>Submit</Button></FormContainer>);
};export default MyForm;

验证触发模式 mode

首先,我们需要在formContext中规定mode属性,这个属性用来确定form何时触发验证规则。mode提供了以下5中触发方式:

ValidationMode = {onBlur: "onBlur";onChange: "onChange";onSubmit: "onSubmit";onTouched: "onTouched";all: "all";
}

根据项目需求,开发者可自行选择触发方式,本例中使用的是all,即需要匹配所有触发方式。

三种表单验证的方法:

  1. 自定义的required的提示
validation={{required: "First Name is required!"}}
  1. 通过正则匹配来验证表单元素
validation={{pattern: {value: URL_REGEXP,message: 'Url is invalid!'}}}
  1. 通过自定义的验证规则来验证表单元素:
validation={{validate: validateLastNameLength
}}

通过以上三种方式,我们可以规定用户输入表单的值并提供自定义的错误提示。

何时能够点击提交按钮

react-hook-form-mui中,提供了简便的api去控制是否能够点击提交按钮。分别是:

  • formContext.formState.isValid: 验证表单元素是否合法。
  • formContext.formState.isDirty: 验证表单元素是否发生过改变。

通过这两种方法,我们可以很轻松地控制何时能够点击提交按钮。

总结

以上是关于React-hook-form-mui的表单验证的的用法。希望本文会对你有所帮助。如果有什么问题,可在下方留言沟通。

相关文章:

  • 获取WordPress分类链接
  • Python与设计模式--适配器模式
  • C语言数据结构之顺序表(上)
  • 在 CentOS 7 上安装 MySQL 8
  • AI数字人直播大屏:创新科技赋能企业的未来
  • 如果每天工资按代码行数来算,来看看你每天工资是多少
  • 【Python】多年数据分成不同sheet
  • Leetcode—2336.无限集中的最小数字【中等】
  • 蓝桥杯day02——Fizz Buzz
  • 超声波清洗机器哪个品牌好用?这四款都夸的超声波清洗机
  • Hive数据库与表操作
  • Git设置多个仓库同时推送
  • Encoder、Decoder和Encoder-Decoder
  • leetcode每日一题35
  • 【matlab程序】图像最大化填充画布
  • 网络传输文件的问题
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Linux系统编程】快速查找errno错误码信息
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • docker容器内的网络抓包
  • es的写入过程
  • JS字符串转数字方法总结
  • k8s 面向应用开发者的基础命令
  • laravel 用artisan创建自己的模板
  • SpingCloudBus整合RabbitMQ
  • Sublime text 3 3103 注册码
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于List、List?、ListObject的区别
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 记一次删除Git记录中的大文件的过程
  • 检测对象或数组
  • 码农张的Bug人生 - 初来乍到
  • 数据可视化之 Sankey 桑基图的实现
  • 学习JavaScript数据结构与算法 — 树
  • 用Canvas画一棵二叉树
  • 湖北分布式智能数据采集方法有哪些?
  • 移动端高清、多屏适配方案
  • ​什么是bug?bug的源头在哪里?
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (C++17) std算法之执行策略 execution
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis哨兵
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (九)信息融合方式简介
  • (四)模仿学习-完成后台管理页面查询
  • (转)jdk与jre的区别
  • (转)setTimeout 和 setInterval 的区别