用途:处理 Next.js Server Action 中可预期的用户可见错误,并与 TanStack React Query 的 mutation 配合。目标是避免从 Server Action 抛出预期错误,改为返回类型化的失败数据,仅在客户端 mutation 需要错误对象时抛出。
主要能力与规则:Server Action 返回 ActionResult<T, E>;将原始服务端或 API 失败映射为安全的错误码;原始后端错误保留在服务端;在客户端翻译错误码;在 mutationFn 中对预期失败抛出普通客户端 Error;在 mutation 或工作流附近处理错误;不要设置全局 mutation throwOnError: true;仅在边界兜底 UI 时使用 mutation 级 throwOnError: true。
结果类型:export type ActionResult<T, E> = | { success: true; data: T } | { success: false; error: E };
流程:Server Action 返回 ActionResult<T, ErrorCode>;服务端把原始失败映射为类型化错误码;mutationFn 调用 action;成功则返回 data;失败则抛出客户端翻译后的 Error;onError 显示 toast 或更新 UI;仅在边界兜底时使用 throwOnError: true。
示例模式:const mutation = useMutation({ mutationFn: async (input: Input) => { const result = await action(input); if (result.success) return result.data; throw new Error(t(errors.${result.error})); }, onError: (error) => toast.error(error.message), });
应避免:为 toast 消息抛出预期 Server Action 错误;在客户端读取生产环境 Server Action 的 Error.message;把原始后端错误返回浏览器;捕获并暴露所有抛出的服务端错误;在 action 与客户端重复消息字符串。
输出:类型化 action 结果、安全错误码枚举或联合、mutationFn 中的客户端解包、本地 onError 处理。
限制:资料未提供安装命令、依赖版本、平台要求或收费信息,暂未提供。