
表单验证是 web 开发的一个重要方面,可确保数据完整性并增强用户体验。在 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-z\d@$!%*?&]{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 (
<form onsubmit={handlesubmit}>
<input
name="firstname"
value={formdata.firstname}
onchange={handlechange}
/>
{errors.firstname && <p>{errors.firstname}</p>}
<input
name="lastname"
value={formdata.lastname}
onchange={handlechange}
/>
{errors.lastname && <p>{errors.lastname}</p>}
<input
name="email"
value={formdata.email}
onchange={handlechange}
/>
{errors.email && <p>{errors.email}</p>}
<input
type="password"
name="password"
value={formdata.password}
onchange={handlechange}
/>
{errors.password && <p>{errors.password}</p>}
{/* more form fields */}
<button type="submit" disabled={issubmitting}>
{issubmitting ? "submitting..." : "submit"}
</button>
</form>
);
};
采用这种传统方法
虽然这可行,但它涉及大量样板代码,对于较大的表单可能会变得很麻烦。
输入react hook form
安装
npm install react-hook-form
import React from "react";
// useForm is the hook which is given by react-hook-form
import { 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 (
<form onSubmit={handleSubmit(onSubmit)}>
<input
{...register("firstName", { required: "First Name is required"
})}
/>
{errors.firstName && <p>{errors.firstName.message}</p>}
<input
{...register("lastName", { required: "Last Name is required"
})}
/>
{errors.lasttName && <p>{errors.lasttName.message}</p>}
<input
{...register("email", {
required: "Email is required",
pattern: { value: /^\S+@\S+$/i, message: "Invalid email address" }
})}
/>
{errors.email && <p>{errors.email.message}</p>}
<input
{...register("password", { required: "First Name is required",
pattern: { value: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, message: "Invalid password"}
})}
/>
{errors.firstName && <p>{errors.firstName.message}</p>}
{/* More form fields */}
<button type="submit" disabled={isSubmitting}>
{isSubmitting ? "Submitting..." : "Submit"}
</button>
</form>
);
};
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 表单与传统方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号