React Hook Form - 对于 React Hook Form v7.5.2,在单个页面上无法处理多个表单的错误
React Hook Form - Errors not working for multiple forms on a single page for react hook form v7.5.2
对于以前版本的 react hook form,如果您使用以下代码行创建另一个表单对象,则多个表单过去可以工作:
const {
register: register2,
handleSubmit: handleSubmit2,
errors: errors2
} = useForm()
现在将语法更改为 formState,不会创建第二个表单的错误对象,它会引发错误。
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors2 }
} = useForm()
我的完整代码在这里:
import { useForm } from 'react-hook-form'
import { useState } from 'react'
function App() {
const [firstname,setFirstName] = useState(null)
const [lastname,setLastName] = useState(null)
const [email,setEmail] = useState(null)
const [address,setAddress] = useState(null)
const { register, handleSubmit , formState: { errors } } = useForm()
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors2 }
} = useForm()
const handleInputChange = (e) =>{
const target = e.target
const name = target.name
if(name === 'firstname'){
setFirstName(target.value)
}
if(name === 'lastname'){
setLastName(target.value)
}
if(name === 'email'){
setEmail(target.value)
}
if(name === 'address'){
setAddress(target.value)
}
}
const submitData = async()=>{
console.log(firstname,lastname)
}
const submitData2 = async()=>{
console.log(email,address)
}
return (
<div className="App">
<form key={1} onSubmit={handleSubmit(submitData)}>
<input name='firstname' type="text" {...register('firstname',{required:true})} onChangeCapture={handleInputChange} placeholder="enter firstname" />
<p>{errors.firstname && "First Name is Required"}</p>
<input name='lastname' type="text"{...register('lastname',{required:true})} onChangeCapture={handleInputChange} placeholder="enter lastname" />
<p>{errors.lastname && "Last Name is Required"}</p>
<button type="submit"> submit </button>
</form>
<hr />
<form key={2} onSubmit={handleSubmit2(submitData2)}>
<input name='email' type="text" {...register2('email',{required:true})} onChangeCapture={handleInputChange} placeholder="enter firstname" />
<p>{errors.email && " Email is Required"}</p>
<input name='address' type="text"{...register2('address',{required:true})} onChangeCapture={handleInputChange} placeholder="enter lastname" />
<p>{errors.address && "Address is Required"}</p>
<button type="submit"> submit </button>
</form>
</div>
);
}
export default App;
这是我的输出截图:
第一种形式会触发错误,但第二种形式不会显示错误。反应挂钩 v7.5.2
请帮忙!!!!
这里的问题是你解构 formState
的方式。试试这个方法,它应该可以工作:
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors: errors2 }
} = useForm()
对于以前版本的 react hook form,如果您使用以下代码行创建另一个表单对象,则多个表单过去可以工作:
const {
register: register2,
handleSubmit: handleSubmit2,
errors: errors2
} = useForm()
现在将语法更改为 formState,不会创建第二个表单的错误对象,它会引发错误。
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors2 }
} = useForm()
我的完整代码在这里:
import { useForm } from 'react-hook-form'
import { useState } from 'react'
function App() {
const [firstname,setFirstName] = useState(null)
const [lastname,setLastName] = useState(null)
const [email,setEmail] = useState(null)
const [address,setAddress] = useState(null)
const { register, handleSubmit , formState: { errors } } = useForm()
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors2 }
} = useForm()
const handleInputChange = (e) =>{
const target = e.target
const name = target.name
if(name === 'firstname'){
setFirstName(target.value)
}
if(name === 'lastname'){
setLastName(target.value)
}
if(name === 'email'){
setEmail(target.value)
}
if(name === 'address'){
setAddress(target.value)
}
}
const submitData = async()=>{
console.log(firstname,lastname)
}
const submitData2 = async()=>{
console.log(email,address)
}
return (
<div className="App">
<form key={1} onSubmit={handleSubmit(submitData)}>
<input name='firstname' type="text" {...register('firstname',{required:true})} onChangeCapture={handleInputChange} placeholder="enter firstname" />
<p>{errors.firstname && "First Name is Required"}</p>
<input name='lastname' type="text"{...register('lastname',{required:true})} onChangeCapture={handleInputChange} placeholder="enter lastname" />
<p>{errors.lastname && "Last Name is Required"}</p>
<button type="submit"> submit </button>
</form>
<hr />
<form key={2} onSubmit={handleSubmit2(submitData2)}>
<input name='email' type="text" {...register2('email',{required:true})} onChangeCapture={handleInputChange} placeholder="enter firstname" />
<p>{errors.email && " Email is Required"}</p>
<input name='address' type="text"{...register2('address',{required:true})} onChangeCapture={handleInputChange} placeholder="enter lastname" />
<p>{errors.address && "Address is Required"}</p>
<button type="submit"> submit </button>
</form>
</div>
);
}
export default App;
这是我的输出截图:
第一种形式会触发错误,但第二种形式不会显示错误。反应挂钩 v7.5.2 请帮忙!!!!
这里的问题是你解构 formState
的方式。试试这个方法,它应该可以工作:
const {
register: register2,
handleSubmit: handleSubmit2,
formState: { errors: errors2 }
} = useForm()