【React】尝试使用React Hook Form进行重构

首先

某一天的事情

我:“哎呀,随着规格的变更,表单的项目也增加了呢…”

成员:“对于每个项目都声明了状态变量,所以代码量非常多。”

我觉得有什么办法可以写得更好吗?

成员: “好像使用React Hook Form可以写得很好”。

我能摸一下吗?

这个问题

React Hook Form是一个库,可以用于创建表单的状态管理和验证。

 

如果不使用React Hook Form

image.png
显示代码
导入{ FormLabel,Input,Button,VStack,Text } from’@ chakra-ui / react’
import React,{ ChangeEvent,useState } from’react’功能 App(){
const [name,setName] = useState(””)
const [nameErr,setNameErr] = useState(””)
const [isNameErr,setIsNameErr] = useState(false)

const handleSubmit =(e:React.FormEvent )=> {
e.preventDefault();
console.log(name)
}

const onChangeName =(e:ChangeEvent )=> {
if(e.target.value.length === 0){
setNameErr(”名前は必須です”);
setIsNameErr(true);
} else {
setNameErr(””);
setIsNameErr(false);
}
setName(e.target.value)
}

return(

handleSubmit(e)}>

First name </ FormLabel>
onChangeName(e)}isInvalid = {isNameErr}/>
{isNameErr && {nameErr} }

在代码中,我们声明了许多状态变量和函数…
我们声明了三个状态变量,分别是“名字”的状态变量、错误消息的状态变量和验证的状态变量。
此外,我们还声明了一个根据状态显示错误消息的函数。
每当我们向输入表单中添加新项目时,声明这些变量将会变得非常繁琐。

我想尝试使用React Hook Form。

如果使用React Hook Form

在App函数中,我们使用了Chakra UI来创建了一个包含表单的页面。首先,我们导入了所需的组件和库,并定义了一个LoginForm接口,它包含了两个字段:name和password。然后,我们使用react-hook-form库初始化了一个表单,通过解构赋值获取了register、handleSubmit和errors等属性。我们在onSubmit函数中打印了表单数据。

接下来,构建了一个包含表单元素的VStack组件。在

标签中,我们注册了handleSubmit函数作为表单的提交事件处理程序。在中,我们创建了一个,用于显示名字输入框的标签。

然后,我们使用组件创建了一个名字输入框,并使用{…register(“name”, {…})}绑定了该输入框到react-hook-form库,设置了输入框的验证规则。

最后,我们使用

最终,我们将以上内容包裹在最外层的组件中,并将其导出为默认的App组件。

由于代码的减少,它变得更加简洁。
验证条件包括姓名为空和至少四个字符的条件。

image.png
image.png

在输入字符时,我们会在超过四个字符时进行验证。你可以通过设置useForm的mode: “onChange”来实现这一点。

此外,当出现验证错误时,按下按钮也无法发送数据。

image.png

最后

重构工作似乎会进展顺利。

请参阅

 

广告
将在 10 秒后关闭
bannerAds