Kev*_*ton 29 material-ui react-hook-form
我有一个表单(抱歉太长了),用户输入姓名、电子邮件、电话、评论非常简单:
<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>
Run Code Online (Sandbox Code Playgroud)
所有字段在提交时都会经过验证。无论如何,有没有办法让react-hook-forms在提交表单之前进行某种验证?我想要像 Angular 那样的标志来表示脏的、原始的等。
Shi*_*BR2 23
更新!验证器 API: https: //react-hook-form.com/api/。
您可以选择该值onBlur而不是默认onSubmit模式。
您可以在这里关注官方文档:https ://react-hook-form.com/get-started#Registerfields 。
基本上您需要register验证字段。然后react-hook-form将在提交时自动为您验证。
小智 15
使用模式我们可以这样做:
模式: onChange | 模糊 | 提交 | 触碰 | all = 'onSubmit'(React Native:与控制器兼容)
const { register, trigger, handleSubmit, watch, formState: { errors } } = useForm({
mode: 'all', // THIS WILL ALLOW ALL-TIME VALIDATION (May have performance impact)
resolver: yupResolver(ValidationSchema),
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59601 次 |
| 最近记录: |