useFormStatus/useFormState 渐进式表单与 Server Actions概述`useFormStatus` 在表单提交期间提供 `pending` 等状态;`useFormState` 提供服务端返回的结果/错误,结合 Server Actions 简化表单处理与用户反馈。表单与 Server Actions'use client'
import { useFormStatus } from 'react-dom'
function SubmitButton() {
const { pending } = useFormStatus()
return <button type="submit" disabled={pending}>{pending ? '提交中…' : '提交'}</button>
}
export default function Form() {
return (
<form action={saveAction}>
<input name="email" type="email" required />
<SubmitButton />
</form>
)
}
'use server'
import { z } from 'zod'
import { revalidateTag } from 'next/cache'
const schema = z.object({ email: z.string().email() })
export async function saveAction(formData: FormData) {
const data = Object.fromEntries(formData)
const parsed = schema.safeParse(data)
if (!parsed.success) return { ok: false, errors: parsed.error.flatten() }
await db.user.upsert(parsed.data)
revalidateTag('users')
return { ok: true }
}
useFormState 错误反馈(示意)'use client'
import { useFormState } from 'react-dom'
export function EnhancedForm() {
const [state, action] = useFormState(saveAction, { ok: true })
return (
<form action={action}>
<input name="email" type="email" />
{state?.errors && <div className="error">邮箱格式不正确</div>}
<button type="submit">提交</button>
</form>
)
}
技术参数与验证表单交互响应性良好;错误反馈即时;标签失效与数据一致性正常。注意事项组件层级需满足 Hooks 的表单上下文;与幂等/回滚策略协同。---发布信息:已发布 · 技术验证 · 阅读 34 分钟 · CC BY-SA 4.0

发表评论 取消回复