本文讲解如何在 react router v6 的 loader 函数中安全检测并响应来自 api 请求处理器(如 `responsehandler`)的重定向意图,避免将 `redirect()` 对象误作普通数据返回,确保未授权等场景能及时跳转。
在 React Router v6 中,loader 函数必须同步返回一个可序列化的数据对象,或异步返回一个 Response(如由 redirect() 创建)。若你在 responseHandler 中直接调用 return redirect(‘/’),该 RedirectFunction 实例会被当作普通 JavaScript 对象(而非执行重定向),最终被合并进 loader 返回的结构体中——这正是你遇到的问题:permissions 或 userDetail 字段变成了 { url: “/”, status: 302, … } 这类不可序列化/不可消费的对象,导致组件解构失败或运行时异常。
✅ 正确做法是:统一约定响应格式,让 responseHandler 返回结构化对象(如 { data: …, redirect: … }),再由 loader 显式检查并触发重定向。
以下是推荐实现方案: