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

React-Hooks-Form 集成 Zod 校验库

React-Hooks-Form 集成 Zod 校验库

首先需要安装 react hooks form 官方提交的解析器

npm install @hookform/resolvers

再安装校验库

npm install zod

它不仅支持 Zod 校验库同时还支持目前各种主流的校验库比如:Yup、Zod、Joi、Ajv、Vest、Custom

具体查看官方文档: https://react-hook-form.com/docs/useform#resolver

我们就拿 Zod 举例:

import { useState } from "react";
import { SubmitHandler, useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod"
import * as z from "zod"

// 定义校验参数
const schema = z.object({
    name: z.string().min(1, { message: "名称不能为空" }),
    age: z.number().min(1, { message: "年龄不能小于1" }).max(99, { message: "年龄不能超过99" }),
})

type Schema = z.infer<typeof schema>

export default () => {
    const [defaultValues, setDefaultValues] = useState<Schema>({ name: "", age: 0 })
    const { register, handleSubmit, formState: { errors } } = useForm<Schema>({
        // 默认值
        defaultValues,
        // 配置校验解析器
        resolver: zodResolver(schema),
    });

    const onSubmit: SubmitHandler<Schema> = (data, event) => {
        // 阻止默认提交行为
        event?.preventDefault();

        console.log(data)
    }

    return (
        <>
            <form onSubmit={handleSubmit(onSubmit)}>
                <input {...register("name")} type="text" />
                <span>{errors.name && errors.name.message}</span>

                <input {...register("age")} type="text" />
                <span>{errors.age && errors.age.message}</span>

                <button type="submit">提交</button>
            </form>
        </>
    )
}

详细的校验配置信息可查看 Zod 官方文档:https://zod.dev/


http://www.kler.cn/news/307856.html

相关文章:

  • go get -u @latest没有更新依赖模块
  • 如何通过深度学习实践来理解深度学习的核心概念
  • Ubuntu 24.04中安装virtualenv
  • QT + WebAssembly + Vue环境搭建
  • JS面试真题 part4
  • 【Spring框架精讲】进阶指南:企业级Java应用的核心框架(Spring5)
  • NX二次开发—批量导出点工具
  • html限制仅有一个音/视频可播放
  • 阿里云社区领积分自动打卡Selenium IDE脚本
  • How to see if openAI (node js) createModeration response “flagged“ is true
  • 代码随想录算法训练营第五十八天 | 拓扑排序精讲-软件构建
  • Arduino IDE离线配置第三方库文件-ESP32开发板
  • 8.JMeter+Ant(基于工具的实现接口自动化,命令行方式)
  • 常见的限流算法
  • 【C/C++】程序的构建(编译)过程概述
  • 【C++】函数重载
  • Python使用pymysql返回字典类型的数据
  • yum本地源配置
  • 基于 SpringBoot 的车辆充电桩管理系统
  • 医药|基于springboot的医药管理系统设计与实现(附项目源码+论文+数据库)
  • JAVA算法数据结构第一节稀疏矩阵
  • ADB ROOT开启流程
  • C# AutoResetEvent ManualResetEvent Mutex 对比
  • 54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)
  • ip映射域名,一般用于mysql和redis的固定映射,方便快捷打包
  • python基本数据类型简记
  • vue3 组合式API defineEmits() 与 emits 组件选项
  • I²C通信协议
  • 基于SpringBoot的考研助手系统+LW参考示例
  • 模拟实现通用型排序