Skip to content

Commit af76d50

Browse files
authored
refactor(react-router): Fix useRoutesImpl for SSR (#10395)
1 parent 7110596 commit af76d50

File tree

6 files changed

+29
-13
lines changed

6 files changed

+29
-13
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
"none": "45.8 kB"
109109
},
110110
"packages/react-router/dist/react-router.production.min.js": {
111-
"none": "12.9 kB"
111+
"none": "13 kB"
112112
},
113113
"packages/react-router/dist/umd/react-router.production.min.js": {
114114
"none": "15.3 kB"

packages/react-router-dom/__tests__/exports-test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import * as ReactRouter from "react-router";
22
import * as ReactRouterDOM from "react-router-dom";
33

4-
let nonReExportedKeys = new Set(["UNSAFE_mapRouteProperties"]);
4+
let nonReExportedKeys = new Set([
5+
"UNSAFE_mapRouteProperties",
6+
"UNSAFE_useRoutesImpl",
7+
]);
58

69
describe("react-router-dom", () => {
710
for (let key in ReactRouter) {

packages/react-router-dom/server.tsx

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
StaticHandlerContext,
77
CreateStaticHandlerOptions as RouterCreateStaticHandlerOptions,
88
UNSAFE_RouteManifest as RouteManifest,
9+
RouterState,
910
} from "@remix-run/router";
1011
import {
1112
IDLE_BLOCKER,
@@ -17,7 +18,10 @@ import {
1718
createStaticHandler as routerCreateStaticHandler,
1819
UNSAFE_convertRoutesToDataRoutes as convertRoutesToDataRoutes,
1920
} from "@remix-run/router";
20-
import { UNSAFE_mapRouteProperties as mapRouteProperties } from "react-router";
21+
import {
22+
UNSAFE_mapRouteProperties as mapRouteProperties,
23+
UNSAFE_useRoutesImpl as useRoutesImpl,
24+
} from "react-router";
2125
import type {
2226
DataRouteObject,
2327
Location,
@@ -28,7 +32,6 @@ import {
2832
createPath,
2933
parsePath,
3034
Router,
31-
useRoutes,
3235
UNSAFE_DataRouterContext as DataRouterContext,
3336
UNSAFE_DataRouterStateContext as DataRouterStateContext,
3437
} from "react-router-dom";
@@ -122,17 +125,19 @@ export function StaticRouterProvider({
122125
hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;
123126
}
124127

128+
let { state } = dataRouterContext.router;
129+
125130
return (
126131
<>
127132
<DataRouterContext.Provider value={dataRouterContext}>
128-
<DataRouterStateContext.Provider value={dataRouterContext.router.state}>
133+
<DataRouterStateContext.Provider value={state}>
129134
<Router
130135
basename={dataRouterContext.basename}
131-
location={dataRouterContext.router.state.location}
132-
navigationType={dataRouterContext.router.state.historyAction}
136+
location={state.location}
137+
navigationType={state.historyAction}
133138
navigator={dataRouterContext.navigator}
134139
>
135-
<DataRoutes routes={router.routes} />
140+
<DataRoutes routes={router.routes} state={state} />
136141
</Router>
137142
</DataRouterStateContext.Provider>
138143
</DataRouterContext.Provider>
@@ -149,10 +154,12 @@ export function StaticRouterProvider({
149154

150155
function DataRoutes({
151156
routes,
157+
state,
152158
}: {
153159
routes: DataRouteObject[];
160+
state: RouterState;
154161
}): React.ReactElement | null {
155-
return useRoutes(routes);
162+
return useRoutesImpl(routes, undefined, state);
156163
}
157164

158165
function serializeErrors(

packages/react-router-native/__tests__/exports-test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import * as ReactRouter from "react-router";
22
import * as ReactRouterNative from "react-router-native";
33

4-
let nonReExportedKeys = new Set(["UNSAFE_mapRouteProperties"]);
4+
let nonReExportedKeys = new Set([
5+
"UNSAFE_mapRouteProperties",
6+
"UNSAFE_useRoutesImpl",
7+
]);
58

69
describe("react-router-native", () => {
710
for (let key in ReactRouter) {

packages/react-router/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ import {
109109
useRevalidator,
110110
useRouteError,
111111
useRouteLoaderData,
112+
useRoutesImpl,
112113
} from "./lib/hooks";
113114

114115
// Exported for backwards compatibility, but not being used internally anymore
@@ -299,4 +300,5 @@ export {
299300
DataRouterStateContext as UNSAFE_DataRouterStateContext,
300301
mapRouteProperties as UNSAFE_mapRouteProperties,
301302
useRouteId as UNSAFE_useRouteId,
303+
useRoutesImpl as UNSAFE_useRoutesImpl,
302304
};

packages/react-router/lib/components.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
To,
99
LazyRouteFunction,
1010
RelativeRoutingType,
11+
RouterState,
1112
} from "@remix-run/router";
1213
import {
1314
Action as NavigationType,
@@ -116,7 +117,7 @@ export function RouterProvider({
116117
navigator={navigator}
117118
>
118119
{router.state.initialized ? (
119-
<DataRoutes routes={router.routes} />
120+
<DataRoutes routes={router.routes} state={state} />
120121
) : (
121122
fallbackElement
122123
)}
@@ -130,11 +131,11 @@ export function RouterProvider({
130131

131132
function DataRoutes({
132133
routes,
134+
state,
133135
}: {
134136
routes: DataRouteObject[];
137+
state: RouterState;
135138
}): React.ReactElement | null {
136-
let state = React.useContext(DataRouterStateContext);
137-
invariant(state, "No Router state available for DataRoutes");
138139
return useRoutesImpl(routes, undefined, state);
139140
}
140141

0 commit comments

Comments
 (0)