• 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 (
        <FormContainer
          formContext={formContext}
          onSuccess={(data) => {
            onSubmit(data);
          }}
        >
          {/* 使用 validation 属性设置表单验证规则 */}
          <TextFieldElement
            name="firstName"
            label="First Name"
            validation={{
              required: "First Name is required!"
            }}
          />
    
          <TextFieldElement
            name="lastName"
            label="First Name"
            validation={{
              validate: validateLastNameLength
            }}
          />
          <TextFieldElement
            name="url"
            label="Url"
          />
          <Button
            type="submit"
          <Button
            type="submit"
            // 当表单所有元素都验证通过并且表单元素发生过改变后,可以点击提交按钮
            disabled={
              !formContext.formState.isValid || !formContext.formState.isDirty
            }
          >
            Submit
          </Button>
        </FormContainer>
      );
    };
    
    export default MyForm;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    验证触发模式 mode

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

    ValidationMode = {
        onBlur: "onBlur";
        onChange: "onChange";
        onSubmit: "onSubmit";
        onTouched: "onTouched";
        all: "all";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    三种表单验证的方法:

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

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

    何时能够点击提交按钮

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

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

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

    总结

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

  • 相关阅读:
    Markdown语法手册(基础使用)
    Hbase 笔记
    龙蜥anolis8.9安装hadoop3.3.6伪分布环境
    java泛型PECS<Producer Extends Consumer Super>原则
    第七节:类和对象【一】【java】
    膜拜,Alibaba最新发布SprinBoot:进阶原理实战与面试题分析指南
    2023.10.01-winxpsp3绿色安装jdk1.8
    Vue学习笔记-全局事件总线
    初识Cpp之 三、Cpp预处理器
    项目管理过程 与 项目管理过程组
  • 原文地址:https://blog.csdn.net/m0_73117087/article/details/132409022