useFormStatus הוא Hook שמספק מידע סטטוס על שליחת הטופס האחרונה.
const { pending, data, method, action } = useFormStatus();הפניה
useFormStatus()
ה-Hook useFormStatus מספק מידע סטטוס על שליחת הטופס האחרונה.
import { useFormStatus } from "react-dom";
import action from './actions';
function Submit() {
const status = useFormStatus();
return <button disabled={status.pending}>Submit</button>
}
export default function App() {
return (
<form action={action}>
<Submit />
</form>
);
}כדי לקבל מידע סטטוס, רכיב Submit חייב להיות מרונדר בתוך <form>. ה-Hook מחזיר מידע כמו המאפיין pending שמציין האם הטופס כרגע בשליחה.
בדוגמה למעלה, Submit משתמש במידע הזה כדי להשבית לחיצות על <button> בזמן שהטופס נשלח.
פרמטרים
useFormStatus לא מקבל פרמטרים.
מחזירה
אובייקט status עם המאפיינים הבאים:
-
pending: ערך בוליאני. אם TK_1__, היא<form>ההורה יש שליחה ממתינה. אחרתfalse. -
data: אובייקט שמממש אתFormData interfaceומכיל את ש-<form>ההורה שולח. אם אין שליחה פעילה או שאין<form>הורה, הערך יהיהnull. -
method: מחרוזת בערך'get'או'post'. מעוררת האם ה-<form>ההורה שולחת באמצעותGETאוPOSTשיטת HTTP. כברירת מחדל,<form>תשתמש ב-GET, ואפשר להגדיר זאת דרך המאפייןmethod.
action: הפניה לפונקציה שהועברה ל-prop בשםactionשלformההורה. אם אין<form>הורה, המאפיין הואnull. אם סופק ערך URI ל-propaction, או שלא צויןaction, הערך שלstatus.actionיהיהnull.
אזהרות
- ה-Hook
useFormStatusחייב להיקרא מתוך קומפונטה שמרונדרת בתוך<form>. useFormStatusתחזיר מידע סטטוס רק עבור<form>הורה. היא לא תחזיר מידע סטטוס עבור<form>שמרונדרת באותו קומפונטה עצמה או בקומפוננטות ילדים.
שימוש
הצגת מצב בהמתנה בזמן שליחת טופס
כדי להציג מצב בהמתנה בזמן שטופס נשלח, אפשר לקרוא ל-Hook useFormStatus בקומפוננטה שמרונדרת בתוך <form> ולקרוא את מאפיין pending שמוחזר.
כאן אנחנו משתמשים ב-pending כדי לציין שהטופס נשלח.
import { useFormStatus } from "react-dom"; import { submitForm } from "./actions.js"; function Submit() { const { pending } = useFormStatus(); return ( <button type="submit" disabled={pending}> {pending ? "Submitting..." : "Submit"} </button> ); } function Form({ action }) { return ( <form action={action}> <Submit /> </form> ); } export default function App() { return <Form action={submitForm} />; }
קריאת נתוני הטופס שנשלחים
אפשר להשתמש במאפיין data מתוך מידע הסטטוס שמוחזר מ-useFormStatus כדי להציג אילו נתונים משתמש שולח.
כאן יש לנו טופס שבו משתמשים יכולים לבקש שם משתמש. אפשר להשתמש ב-useFormStatus כדי להציג הודעת סטטוס זמנית שמאשרת איזה משתמש הם ביקשו.
import {useState, useMemo, useRef} from 'react'; import {useFormStatus} from 'react-dom'; export default function UsernameForm() { const {pending, data} = useFormStatus(); return ( <div> <h3>Request a Username: </h3> <input type="text" name="username" disabled={pending}/> <button type="submit" disabled={pending}> Submit </button> <br /> <p>{data ? `Requesting ${data?.get("username")}...`: ''}</p> </div> ); }
פתרון תקלות
status.pending אף פעם לא true
useFormStatus תחזיר מידע סטטוס רק עבור <form> הורה.
אם הקומפוננטה שקוראת ל-useFormStatus אינה מקוננת בתוך <form>, הערך status.pending תמיד יהיה false. ודאו ש-useFormStatus נקראת בתוך קומפוננטה שהיא ילדה של אלמנט <form>.
useFormStatus לא תעקוב אחרי הסטטוס של <form> שמרונדרת במקביל. ראו pitfall לפרטים נוספים.