useFormStatus
கடைசி form submission-ன் status information-ஐ தரும் Hook தான் useFormStatus.
const { pending, data, method, action } = useFormStatus();குறிப்பு
useFormStatus()
useFormStatus Hook கடைசி form submission-ன் status information-ஐ வழங்குகிறது.
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>
);
}Status information பெற, Submit component <form>-க்குள் render செய்யப்பட வேண்டும். Form actively submit ஆகிறதா என்பதைச் சொல்லும் pending property போன்ற information-ஐ Hook return செய்கிறது.
மேலுள்ள உதாரணத்தில், form submit ஆகும் போது <button> presses-ஐ disable செய்ய Submit இந்த information-ஐப் பயன்படுத்துகிறது.
மேலும் உதாரணங்களை கீழே பார்க்கவும்.
Parameters
useFormStatus parameters எதையும் ஏற்காது.
Returns
பின்வரும் properties கொண்ட status object:
-
pending: ஒரு boolean.trueஎன்றால் parent<form>submission pending நிலையில் உள்ளது. இல்லையெனில்false. -
data: Parent<form>submit செய்யும் data-வை கொண்டFormData interface-ஐ implement செய்யும் object. Active submission இல்லையெனில் அல்லது parent<form>இல்லையெனில், இதுnullஆக இருக்கும். -
method:'get'அல்லது'post'என்ற string value. Parent<form>GETஅல்லதுPOSTHTTP method மூலம் submit செய்கிறதா என்பதை இது குறிக்கிறது. Default-ஆக,<form>GETmethod-ஐப் பயன்படுத்தும்; இதைmethodproperty மூலம் குறிப்பிடலாம்.
action: Parent<form>-ன்actionprop-க்கு pass செய்யப்பட்ட function-க்கு reference. Parent<form>இல்லையெனில், propertynullஆக இருக்கும்.actionprop-க்கு URI value வழங்கப்பட்டிருந்தாலோ, அல்லதுactionprop குறிப்பிடப்படவில்லையெனில்,status.actionnullஆக இருக்கும்.
Caveats
useFormStatusHook<form>-க்குள் render செய்யப்படும் component-இலிருந்து call செய்யப்பட வேண்டும்.useFormStatusparent<form>-க்கான status information மட்டும் return செய்யும். அதே component-இலோ child components-இலோ render செய்யப்படும் எந்த<form>-க்கான status information-ஐயும் return செய்யாது.
பயன்பாடு
Form submission நேரத்தில் pending state காட்டுதல்
ஒரு form submit ஆகும் போது pending state காட்ட, <form>-க்குள் render செய்யப்படும் component-இல் useFormStatus Hook-ஐ call செய்து, return செய்யப்பட்ட pending property-ஐ read செய்யலாம்.
இங்கு form submit ஆகிறது என்பதை காட்ட pending property-ஐப் பயன்படுத்துகிறோம்.
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} />; }
Submit செய்யப்படும் form data-வை read செய்தல்
User submit செய்யும் data என்ன என்பதை display செய்ய, useFormStatus return செய்யும் status information-ன் data property-ஐப் பயன்படுத்தலாம்.
இங்கு users username request செய்யக்கூடிய form உள்ளது. அவர்கள் எந்த username request செய்துள்ளனர் என்பதை உறுதிப்படுத்தும் தற்காலிக status message காட்ட 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 parent <form>-க்கான status information மட்டும் return செய்யும்.
useFormStatus call செய்யும் component <form>-க்குள் nested ஆக இல்லை என்றால், status.pending எப்போதும் false return செய்யும். <form> element-ன் child ஆன component-இல் useFormStatus call செய்யப்படுகிறதா என்பதை verify செய்யுங்கள்.
அதே component-இல் render செய்யப்படும் <form>-ன் status-ஐ useFormStatus track செய்யாது. மேலும் விவரங்களுக்கு Pitfall-ஐப் பார்க்கவும்.