前言
在上一篇文章中,我們介紹了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
,即需要匹配所有觸發方式。
三種表單驗證的方法:
- 自定義的
required
的提示
validation={{required: "First Name is required!"}}
- 通過正則匹配來驗證表單元素
validation={{pattern: {value: URL_REGEXP,message: 'Url is invalid!'}}}
- 通過自定義的驗證規則來驗證表單元素:
validation={{validate: validateLastNameLength
}}
通過以上三種方式,我們可以規定用戶輸入表單的值并提供自定義的錯誤提示。
何時能夠點擊提交按鈕
在react-hook-form-mui
中,提供了簡便的api去控制是否能夠點擊提交按鈕。分別是:
formContext.formState.isValid
: 驗證表單元素是否合法。formContext.formState.isDirty
: 驗證表單元素是否發生過改變。
通過這兩種方法,我們可以很輕松地控制何時能夠點擊提交按鈕。
總結
以上是關于React-hook-form-mui
的表單驗證的的用法。希望本文會對你有所幫助。如果有什么問題,可在下方留言溝通。