我有一个表单(对不起,它太长了),它非常简单的用户输入姓名,电子邮件,电话,评论:
<form
className={classes.root}
data-testid="getting-started-form"
onSubmit={handleSubmit(onSubmit)}
>
<div style={{ width: '400px' }}>
<div style={{ width: '100%'}}>
<Controller as={<TextField
label="Name"
id="name"
name="name"
type="text"
value={name}
placeholder="Name"
onChange={(e: React.FormEvent<EventTarget>) => {
let target = e.target as HTMLInputElement;
setName(target.value);
}}
inputProps={{
'data-testid': 'name'
}}
/>} name="name" rules={{ required: true }} control={control}
/>
{errors.name && <span>Name is required</span>}
</div>
<div style={{ width: '100%' }}>
<Controller as={<TextField
label="Email"
id="email"
name="email"
type="text"
value={email}
placeholder="Email"
style={{ width: '100%' }}
onChange={(e: React.FormEvent<EventTarget>) => {
let target = e.target as HTMLInputElement;
setEmail(target.value);
}}
inputProps={{
'data-testid': 'email'
}}
/>} name="email" rules={{ required: true, pattern: /^\w+[\w-\.]*\@\w+((-\w+)|(\w*))\.[a-z]{2,3}$/i }} control={control}
/>
{errors.email && <span>Email is required</span>}
</div>
<div style={{ width: '30%' }}>
<Controller as={<TextField
label="Phone"
id="phone"
name="phone"
type="text"
value={phone}
placeholder="eg.15556667890"
onChange={(e: React.FormEvent<EventTarget>) => {
let target = e.target as HTMLInputElement;
setPhone(target.value);
}}
inputProps={{
'data-testid': 'phone'
}}
/>} name="phone" rules={{ pattern: /\d{11}/ }} control={control}
/>
</div>
<div style={{ width: '30%' }}>
<Controller as={<TextField
label="Comments"
id="comments"
name="comments"
type="text"
value={comments}
placeholder="Comments"
rows={6}
multiline
onChange={(e: React.FormEvent<EventTarget>) => {
let target = e.target as HTMLInputElement;
setComments(target.value);
}}
inputProps={{
'data-testid': 'comments'
}}
/>} name="comments" control={control}
/>
</div>
</div>
<Button
type="submit"
aria-label="submit getting-started-form"
variant="contained"
color="primary"
data-testid="getting-started-form-submit-button"
>
Submit
</Button>
</form>所有字段均在提交时验证。有没有办法让react-hook-forms在提交表单之前做一些验证?我想要像Angular那样的旗帜,比如脏的,原始的,等等。
发布于 2020-07-10 14:10:58
更新!验证器接口:https://react-hook-form.com/api/。
您可以选择值onBlur,而不是默认的onSubmit模式。
你可以在这里关注官方文档:https://react-hook-form.com/get-started#Registerfields。
基本上,您需要对要验证的字段进行register。然后,react-hook-form将在提交时自动为您验证。
发布于 2020-07-10 11:53:50
我没有使用react-hook-forms,但我在提交之前使用了onblur事件处理程序来验证各个字段。
https://stackoverflow.com/questions/62825841
复制相似问题