24
loading...
This website collects cookies to deliver better user experience
npx create-next-app nextjs-useformhook &&
cd nextjs-useformhook && npm i react-hook-form
mkdir components && cd components && mkdir Form && cd Form && touch InputField.js && touch LoginForm.js
export const InputField = ({ label, register, type, error }) => (
<>
<label>{label}</label>
<input
style={{ background: 'gray' }}
type={type}
{...register(label)}
></input>
<p>{error}</p>
</>
)
import { useForm } from 'react-hook-form'
import { InputField } from './InputField'
export const LoginForm = () => {
const {
register,
handleSubmit,
formState: { errors },
} = useForm()
// This will contain all form data once submit button is clicked.
const onSubmit = (data) => {
console.log(data)
// {Email: '[email protected]', Password: 'secret'}
}
register('Email', { required: { value: true, message: 'Email is required' } })
register('Password', {
required: { value: true, message: 'Password is required' },
})
return (
<>
<form id='loginForm' onSubmit={handleSubmit(onSubmit)}>
<InputField
label='Email'
type='email'
register={register}
error={errors.Email?.message}
/>
<InputField
label='Password'
type='password'
register={register}
error={errors.Password?.message}
/>
</form>
<button style={{ background: '#5757ff' }} type='submit' form='loginForm'>
Login
</button>
</>
)
}