useFormStatus
useFormStatus adalah Hook yang memberi Anda informasi state pengiriman form terakhir.
const { pending, data, method, action } = useFormStatus();Referensi
useFormStatus()
Hook useFormStatus memberikan informasi state pengiriman form terakhir.
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>
);
}Untuk mendapatkan informasi state, komponen Submit harus di-render dalam <form>. Hook mengembalikan informasi seperti properti pending yang memberi tahu Anda apakah form sedang aktif dikirimkan.
Pada contoh di atas, Submit menggunakan informasi ini untuk menonaktifkan penekanan <button> ketika form dikirimkan.
Lihat lebih banyak contoh di bawah.
Parameter
useFormStatus tidak menerima parameter apapun.
Kembalian
Objek status dengan properti berikut:
-
pending: Sebuah boolean. Jikatrue, ini berarti<form>induk sedang menunggu pengiriman. Jika tidak,false. -
data: Objek yang mengimplementasikanFormData interfaceyang berisi data yang dikirimkan oleh<form>induk. Jika tidak ada kiriman atau tidak ada induk<form>, maka akan menjadinull. -
method: Nilai string dari'get'atau'post'. Ini menunjukkan apakah<form>induk mengirimkan dengan metode HTTPGETatauPOST. Secara default,<form>akan menggunakan metodeGETdan dapat ditentukan oleh propertimethod.
action: Referensi fungsi yang diteruskan ke propactionpada<form>induk. Jika tidak ada<form>induk, propertinya adalahnull. Jika ada URI yang diberikan ke propaction, atau tidak ada propactionyang ditentukan,status.actionakan menjadinull.
Catatan Penting
- Hook
useFormStatusharus dipanggil dari komponen yang di-render di dalam<form>. useFormStatushanya akan mengembalikan informasi status untuk<form>induk. Ini tidak akan mengembalikan informasi status untuk<form>apapun yang di-render dalam komponen yang sama atau komponen anak.
Penggunaan
Menampilkan state tertunda selama pengiriman form
Untuk menampilkan state tertunda saat form dikirimkan, Anda dapat memanggil Hook useFormStatus dalam komponen yang di-render dalam <form> dan membaca properti pending yang dikembalikan.
Di sini, kami menggunakan properti pending untuk menunjukkan bahwa form sedang dikirimkan.
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} />; }
Membaca data form yang dikirimkan
Anda dapat menggunakan properti data dari informasi status yang dikembalikan dari useFormStatus untuk menampilkan data apa yang dikirimkan oleh pengguna.
Di sini, kita memiliki form di mana pengguna dapat meminta nama pengguna. Kita dapat menggunakan useFormStatus untuk menampilkan pesan status sementara yang menginformasikan nama pengguna yang mereka minta.
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> ); }
Pemecahan masalah
status.pending tidak pernah true
useFormStatus hanya akan mengembalikan informasi status untuk <form> induk.
Jika komponen yang memanggil useFormStatus tidak disarangkan dalam <form>, status.pending akan selalu mengembalikan false. Pastikan useFormStatus dipanggil dalam komponen yang merupakan turunan dari elemen <form>.
useFormStatus tidak akan melacak status <form> yang di-render dalam komponen yang sama. Lihat Sandungan untuk lebih detail.