Submitting and disabling
The classic form bug: user clicks Submit, nothing visibly happens because the network is slow, user clicks again, now the form has been submitted twice. The fix is trivial: disable the button while submitting, and show a loading label so the user knows something is happening.
const {
register,
handleSubmit,
formState: { isSubmitting },
} = useForm<FormValues>({
resolver: zodResolver(LoginSchema),
});
return (
<form onSubmit={handleSubmit(onSubmit)}>
{/* fields */}
<button disabled={isSubmitting}>
{isSubmitting ? 'Logging in...' : 'Log in'}
</button>
</form>
);isSubmitting is a first-class formState field in React Hook Form.
isSubmitting does double duty. The button is disabled, which prevents double-submits. The label changes, which tells the user the app is responding. A single line of markup fixes one of the most common and embarrassing bugs in form handling.
Quiz: Quiz
Loading practice…
Checkpoint: Forms and validation checkpoint
Loading practice…