diff --git a/packages/react-router/lib/rsc/server.ssr.tsx b/packages/react-router/lib/rsc/server.ssr.tsx index ab6edee839..07e472274d 100644 --- a/packages/react-router/lib/rsc/server.ssr.tsx +++ b/packages/react-router/lib/rsc/server.ssr.tsx @@ -5,6 +5,7 @@ import type { FrameworkContextObject } from "../dom/ssr/entry"; import { createStaticRouter, StaticRouterProvider } from "../dom/server"; import { injectRSCPayload } from "./html-stream/server"; import { RSCRouterGlobalErrorBoundary } from "./errorBoundaries"; +import { shouldHydrateRouteLoader } from "../dom/ssr/routes"; import type { RSCPayload } from "./server.rsc"; export type SSRCreateFromReadableStreamFunction = ( @@ -112,12 +113,27 @@ export function RSCStaticRouter({ if (payload.type !== "render") return null; + let patchedLoaderData = { ...payload.loaderData }; + for (const match of payload.matches) { + if ( + shouldHydrateRouteLoader( + match.id, + match.clientLoader, + match.hasLoader, + false + ) && + (match.hydrateFallbackElement || !match.hasLoader) + ) { + delete patchedLoaderData[match.id]; + } + } + const context = { actionData: payload.actionData, actionHeaders: {}, basename: payload.basename, errors: payload.errors, - loaderData: payload.loaderData, + loaderData: patchedLoaderData, loaderHeaders: {}, location: payload.location, statusCode: 200,