useFormStatus provides status of the nearest form submission.
Code:
1import { useFormStatus } from "react-dom";23function SubmitButton() {4 const { pending, data, method, action } = useFormStatus();56 return (7 <button type="submit" disabled={pending}>8 {pending ? "Submitting..." : "Submit"}9 </button>10 );11}1213// Must be inside a <form>14function MyForm() {15 return (16 <form action={submitAction}>17 <input name="email" type="email" />18 <SubmitButton />19 </form>20 );21}
Returned properties:
pending — true while form is submittingdata — FormData being submittedmethod — "get" or "post"action — the action functionExample — progress indicator:
1function UploadForm() {2 return (3 <form action={uploadAction}>4 <input type="file" name="file" />5 <UploadButton />6 </form>7 );8}910function UploadButton() {11 const { pending, data } = useFormStatus();12 const fileName = data?.get("file")?.name;1314 return (15 <button type="submit" disabled={pending}>16 {pending ? `Uploading ${fileName}...` : "Upload"}17 </button>18 );19}
Key points: