useFormStatus provides pending state of form submissions.
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 <form>14function MyForm() {15 return (16 <form action={submitAction}>17 <input name="email" />18 <SubmitButton />19 </form>20 );21}
Returned properties:
pending — true while submittingdata — FormData being submittedmethod — "get" or "post"action — the action functionExample — progress:
1function UploadButton() {2 const { pending, data } = useFormStatus();3 const fileName = data?.get("file")?.name;45 return (6 <button disabled={pending}>7 {pending ? `Uploading ${fileName}...` : "Upload"}8 </button>9 );10}
Key points: