通常,在使用表單時,您需要:
a) 顯示載入程式
b) 顯示驗證錯誤
這通常意味著管理幾個狀態變數。但隨著 React 19 中引入的新 useActionState 鉤子,現在有一種更簡單的方法來處理它。
示範
程式碼庫
在以下程式碼片段中,請注意如何使用 useActionState:
import { useActionState } from "react"; import Loader from "@/components/loader"; function Form() { const [error, submitAction, isPending] = useActionState( async (previousState, formData) => { const error = await updateName(formData.get("name")); if (error) { return error; } return ""; }, "" ); return ( <form action={submitAction}> Name: <input type="text" name="name" /> <button type="submit" disabled={isPending}> Save </button> {isPending && <Loader />} {error && <p>{error}</p>} </form> ); }
有幾件事要提:
第一個變數 error 用來表示錯誤。在本例中,它是一個字串,但它實際上可以是任何類型。
第二個變數submitAction是觸發表單提交的函數。
第三個變數 isPending 是一個布林值,表示待處理狀態。它對於在提交表單時停用元素或顯示微調器很有用。
第一個參數是表單提交時submitAction觸發的函數。
第二個參數是錯誤的初始值。在本例中,它是一個空字串,但您可以使用“填寫所有欄位”之類的內容來代替。
表單中的輸入欄位:
<input type="text" name="name" />
可以這樣讀:
formData.get("name");
name 是輸入欄位的名稱。
error 將顯示來自伺服器的任何錯誤。如果沒有,那就是空的。
isPending 會在提交表單時自動由鉤子更新為 true,並在收到後端回應後設定回 false。
如果沒有錯誤,useActionState 也會處理重設表單。
對於這個演示,updateName 函數非常基本,它只是向後端發出 POST 請求,傳遞名稱。如果後端回傳錯誤,則函數會傳回該錯誤;否則,它會傳回一個空字串,這表示伺服器沒有錯誤。
async function updateName(name) { const response = await fetch("/lambda-function", { method: "POST", body: JSON.stringify({ name }), }); if (!response.ok) { const { message } = await response.json(); return message; } return ""; }
我正在使用一個簡單的 lambda 函數,它只檢查名稱是否是至少包含 2 個字元的字串。還有 2 秒的延遲,只是為了給 UI 一些時間來顯示微調器。
import { useActionState } from "react"; import Loader from "@/components/loader"; function Form() { const [error, submitAction, isPending] = useActionState( async (previousState, formData) => { const error = await updateName(formData.get("name")); if (error) { return error; } return ""; }, "" ); return ( <form action={submitAction}> Name: <input type="text" name="name" /> <button type="submit" disabled={isPending}> Save </button> {isPending && <Loader />} {error && <p>{error}</p>} </form> ); }
React 19 的 useActionState 鉤子在處理表單中應該始終存在的兩件事時非常有用:掛起狀態和驗證錯誤。該鉤子負責更新這些“狀態變數”,如果您想比較值,甚至可以提供 previousState 的引用。
提交表單並且沒有回傳錯誤後會發生什麼由應用程式決定。在大多數情況下,這意味著將使用者重新導向到另一個頁面或顯示成功訊息。
以上是React 新鉤子 useActionState的詳細內容。更多資訊請關注PHP中文網其他相關文章!