Async Validation
Give error feedback to a user after server-side validation.
You can find full example at StackBlitz.
Set validation error manually after server response:
import { createForm } from 'solid-hook-form'
import { createSignal } from 'solid-js'
export const ExampleForm = () => {
const form = createForm({
defaultValues: {
email: ''
},
mode: 'onChange'
})
const {
errors,
register,
handleSubmit,
setError
} = form
const [isLoading, setIsLoading] = createSignal(false)
const onSubmit = (values: ExampleFormValues) => {
setIsLoading(true)
fetch('/api/validation')
.then(response => {
if (response.status !== 200) {
setError('email', {
type: 'custom',
message: 'This email is already in use'
})
}
})
.finally(() => {
setIsLoading(false)
})
}
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>Email</label>
<input {...register('email', { required: 'Required' })} />
{errors.email && <p role="alert">{errors.email.message}</p>}
{isLoading() && <p>Loading...</p>}
<Button type="submit" disabled={isLoading()}>
Save
</Button>
</form>
)
}