1. React 19 的 Actions(form actions、useActionState)
React 19 的 Actions 是什么?form actions 与 useActionState 在表单提交场景中如何协作,工程上有哪些边界?
- Actions 基于 Transition 的异步更新语义
<form action={fn}>与原生表单的渐进增强集成- useActionState 的 pending 状态与返回更新机制
Actions 是 React 19 引入的基于 Transition 的异步函数执行机制:传给 action 的函数(如 form action、startTransition 中的函数)会被视为低优先级的 Transition 更新,React 会跟踪其 pending 状态,并自动保留上一次提交的输入值、在提交后重置表单。<form action={fn}> 把提交处理直接挂到原生表单上,action 返回 promise 后 React 自动管理 pending 与表单重置;useActionState(fn, initialState) 则把 action 与状态绑定,返回 [state, formAction, isPending],action 的返回值会成为新的 state,用于展示错误信息或结果数据,并且不依赖 JS 也能通过 server action 完成提交,实现渐进增强。
工程边界:Actions 内的 setState 被视为 Transition,因此多次快速提交会互相打断、以最后一次为准,不适合必须在提交时立即看到结果的场景(可配合 useOptimistic 展示乐观结果);action 若被其它代码直接调用而非通过 form/startTransition,则不会获得 pending 跟踪;useActionState 的状态更新由 action 返回值驱动,错误处理需在 action 内部 try/catch 后返回错误对象而非抛出。此外 form action 的 pending 状态在子组件中不可见,需要 useFormStatus 在表单内部读取。
本题考察对 React 19 表单与异步更新核心机制的掌握:答题主线是"Action = Transition + 表单集成 + 状态跟踪",再展开 form action 的渐进增强与 useActionState 的返回值驱动状态两个落点,最后用工程边界(pending 可见性、错误处理、优先级)体现实战认知。
const [state, formAction, isPending] = useActionState(async (prev, formData) => {
const err = await submit(formData);
return err ?? { ok: true };
}, null);
<form action={formAction}>...</form>