其他
在 next-safe-action 中处理绑定参数…
使用 next-safe-action 的高级特性(bind 参数、metadata、框架错误、类型推断工具、服务端回调、throwServerError)时参考
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
在 next-safe-action 中特定
解决思路
- 通过 `.bind()` 给 action 传递额外参数(例如资源 ID)
- 给 action 附加带类型的 metadata,以便在 middleware 中使用
- 在 action 中处理框架错误:redirect、notFound、forbidden、unauthorized
- 使用类型推断工具从 action 函数和 middleware 推断类型(InferSafeActionFnInput/Result)
- .action() 的第二个参数可传入在服务端运行的回调(不是客户端 hook):onSuccess、onError、onSettled、onNavigation
- onSuccess 回调签名:async ({ data, parsedInput, ctx, metadata, clientInput }) => {},在成功执行后在服务端运行(例如 await invalidateCache("posts"))
- onError 回调签名:async ({ error, metadata, ctx, clientInput, bindArgsClientInputs }) => {},其中 error 形如 { serverError?, validationErrors? },可用于记录错误日志
- onSettled 回调签名:async ({ result }) => {},总是会运行(例如记录指标)
- onNavigation 回调签名:async ({ navigationKind }) => {},在发生框架错误(redirect、notFound 等)时运行
- 注意区分:服务端回调运行在 Node.js 运行时,而 hook 回调(useAction({ onSuccess }))运行在浏览器
- 使用 throwServerError: true 选项,将服务端错误抛出而不是作为 result.serverError 返回;抛出的是经过 handleServerError 处理后的错误
- 不要混淆 throwServerError 与 returnServerError():throwServerError 抛出的是处理后的错误(post-handleServerError),而 returnServerError(payload) 返回一个带类型的预期错误到 result.serverError,并完全绕过 handleServerError
适用边界 · 注意事项
- 需要客户端 hook 回调(useAction)时,不要使用服务端回调,二者运行环境不同
- 需要返回带类型的预期错误并绕过 handleServerError 时,应使用 returnServerError 而非 throwServerError