Skip to content

Commit 7110596

Browse files
authored
Clean up useRoutes RouterProvider detection (#10389)
1 parent 3efa5d0 commit 7110596

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

packages/react-router/lib/components.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
useOutlet,
4242
useRoutes,
4343
_renderMatches,
44+
useRoutesImpl,
4445
} from "./hooks";
4546

4647
export interface RouterProviderProps {
@@ -132,7 +133,9 @@ function DataRoutes({
132133
}: {
133134
routes: DataRouteObject[];
134135
}): React.ReactElement | null {
135-
return useRoutes(routes);
136+
let state = React.useContext(DataRouterStateContext);
137+
invariant(state, "No Router state available for DataRoutes");
138+
return useRoutesImpl(routes, undefined, state);
136139
}
137140

138141
export interface MemoryRouterProps {

packages/react-router/lib/hooks.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,15 @@ export function useResolvedPath(
311311
export function useRoutes(
312312
routes: RouteObject[],
313313
locationArg?: Partial<Location> | string
314+
): React.ReactElement | null {
315+
return useRoutesImpl(routes, locationArg);
316+
}
317+
318+
// Internal implementation with accept optional param for RouterProvider usage
319+
export function useRoutesImpl(
320+
routes: RouteObject[],
321+
locationArg?: Partial<Location> | string,
322+
dataRouterState?: RemixRouter["state"]
314323
): React.ReactElement | null {
315324
invariant(
316325
useInRouterContext(),
@@ -320,8 +329,6 @@ export function useRoutes(
320329
);
321330

322331
let { navigator } = React.useContext(NavigationContext);
323-
let dataRouterContext = React.useContext(DataRouterContext);
324-
let dataRouterStateContext = React.useContext(DataRouterStateContext);
325332
let { matches: parentMatches } = React.useContext(RouteContext);
326333
let routeMatch = parentMatches[parentMatches.length - 1];
327334
let parentParams = routeMatch ? routeMatch.params : {};
@@ -434,10 +441,7 @@ export function useRoutes(
434441
})
435442
),
436443
parentMatches,
437-
// Only pass along the dataRouterStateContext when we're rendering from the
438-
// RouterProvider layer. If routes is different then we're rendering from
439-
// a descendant <Routes> tree
440-
dataRouterContext?.router.routes === routes ? dataRouterStateContext : null
444+
dataRouterState
441445
);
442446

443447
// When a user passes in a `locationArg`, the associated routes need to

0 commit comments

Comments
 (0)