useActionState 表单与状态机协同实践概述`useActionState` 将动作与状态联结,简化服务端返回处理与前端状态机,实现更清晰的表单交互流程。基本用法'use client'

import { useActionState } from 'react'

function reducer(prev: any, next: any) { return next }

export default function Form() {

const [state, formAction] = useActionState(reducer, { ok: true })

return (

<form action={formAction as any}>

<input name="email" type="email" />

{state?.errors && <div className="error">邮箱格式不正确</div>}

<button type="submit">提交</button>

</form>

)

}

Server Actions 协同'use server'

import { z } from 'zod'

export async function formAction(prev: any, formData: FormData) {

const parsed = z.object({ email: z.string().email() }).safeParse(Object.fromEntries(formData))

if (!parsed.success) return { ok: false, errors: parsed.error.flatten() }

await db.user.upsert(parsed.data)

return { ok: true }

}

状态机策略状态:idle→pending→success/failed;失败提供重试与错误定位;成功清理输入或提示。技术参数与验证表单反馈及时;错误定位清晰;交互可回退与重试可用。注意事项与 `useFormStatus/useFormState` 区分使用场景;避免复杂 reducer 引入额外心智负担。---发布信息:已发布 · 技术验证 · 阅读 34 分钟 · CC BY-SA 4.0

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部