import './App.css';
import { useForm } from 'react-hook-form';
function App() {
const { register,
handleSubmit,
formState: {errors},
} = useForm();
const onSubmit = (data) => console.log(data);
return (
<div className="App">
<h1>login</h1>
<form onSubmit={handleSubmit(onSubmit)}>
<div>
<label htmlFor="email">Email</label>
<input id="email" {...register('email', { required: true })} />
{errors.email && <div>入力が必須の項目です</div>}
</div>
<div>
<label htmlFor="password">パスワード</label>
<input
id="password"
{...register('password')} type="password"
/>
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
</div>
);
}

複数のエラーメッセージ
function App() {
const { register,
handleSubmit,
formState: {errors},
} = useForm({
criteriaMode: 'all',
});
<label htmlFor="password">パスワード</label>
<input
id="password"
{...register('password', {
required: {
value: true,
message: '入力が必須の項目です。',
},
pattern: {
value: /^[A-Za-z]+$/,
message: 'アルファベットのみ入力してください。'
},
minLength: {
value: 8,
message: '8文字以上入力してください。'
}
})} type="password"
/>
{errors.password?.type === 'required' && (<div>{errors.password.types.required}</div>)}
{errors.password?.type === 'pattern' && (<div>{errors.password.types.pattern}</div>)}
{errors.password?.type === 'minLength' && (<div>8文字以上入力してください。</div>)}
</div>
バリデーションのタイミングは制御できる
reValidateMode: ‘onSubmit’,
mode: ‘onChange’,
なるほど、何となくわかってきました。
さぁ、実装していきますか…