Form Submission
As you're aware by now, to handle form submission, you provide Form component with an async function named onSubmit.
import React from 'react'
import { Form } from 'react-hooks-form'
async function handleSubmit(values) {
const response = await _myApiRequest(values)
if (response.status === 422) {
throw await response.json()
// Throw server-side errors
// useFormMeta().error
} else {
return await response.json()
// Return submission result (Optional)
// useFormMeta().result
}
}
function SignUpForm() {
return (
<Form name="signUp" onSubmit={handleSubmit}>
...
</Form>
)
}
If you don't want to use async syntax, you can provide a normal function and instead, return a Promise.
Submission Status
Form submission status can be accessed via useFormMeta hook. submitting, submitFailed and submitSucceeded are three boolean flags you can use to alter the UI based on form status.
const {
submitting,
submitFailed,
submitSucceeded
} = useFormMeta()
Disabled/Loading Submit Button
You want to disable the submit button or show a loading indicator while form is being submitted. Ok, use form meta!
import React from 'react'
import { useFormMeta } from 'react-hooks-form'
function SubmitButton() {
const { submitting } = useFormMeta()
return (
<Button
disabled={submitting}
loading={submitting}
text="Save"
/>
)
}
Remote Submit Button
So far, we've only used HTML form onSubmit event to trigger form submission. It's possible that you trigger it yourself, programmatically!
import React from 'react'
import { useForm, useFormMeta } from 'react-hooks-form'
function RemoteSubmitButton() {
const form = useForm()
const { submitting } = useFormMeta()
const handleRemoteSubmit = () => form.submit()
return (
<Button
disabled={submitting}
loading={submitting}
onClick={handleRemoteSubmit}
text="Save"
/>
)
}
Here's the new hook useForm. This one gives you access to the form API. You'll learn more about it in the next section.