@@ -6,7 +6,6 @@ import type {
6
6
InitialEntry ,
7
7
Location ,
8
8
MemoryHistory ,
9
- PartialLocation ,
10
9
Path ,
11
10
State ,
12
11
To ,
@@ -250,10 +249,15 @@ export function Router({
250
249
) ;
251
250
}
252
251
252
+ interface PartialLocation < S extends State = State >
253
+ extends Omit < Partial < Location < S > > , "pathname" > {
254
+ pathname : string ;
255
+ }
256
+
253
257
export interface RoutesProps {
254
258
basename ?: string ;
255
259
children ?: React . ReactNode ;
256
- location ?: Location ;
260
+ location ?: PartialLocation ;
257
261
}
258
262
259
263
/**
@@ -268,8 +272,7 @@ export function Routes({
268
272
location
269
273
} : RoutesProps ) : React . ReactElement | null {
270
274
let routes = createRoutesFromChildren ( children ) ;
271
- let location_ = useLocation ( ) ;
272
- return useRoutes_ ( routes , location ?? location_ , basename ) ;
275
+ return useRoutes_ ( routes , location , basename ) ;
273
276
}
274
277
275
278
///////////////////////////////////////////////////////////////////////////////
@@ -492,7 +495,8 @@ export function useResolvedPath(to: To): Path {
492
495
*/
493
496
export function useRoutes (
494
497
partialRoutes : PartialRouteObject [ ] ,
495
- basename = ""
498
+ basename = "" ,
499
+ location ?: PartialLocation
496
500
) : React . ReactElement | null {
497
501
invariant (
498
502
useInRouterContext ( ) ,
@@ -501,7 +505,6 @@ export function useRoutes(
501
505
`useRoutes() may be used only in the context of a <Router> component.`
502
506
) ;
503
507
504
- let location = useLocation ( ) ;
505
508
let routes = React . useMemo (
506
509
( ) => createRoutesFromArray ( partialRoutes ) ,
507
510
[ partialRoutes ]
@@ -512,7 +515,7 @@ export function useRoutes(
512
515
513
516
function useRoutes_ (
514
517
routes : RouteObject [ ] ,
515
- location : Location ,
518
+ locationOverride ?: PartialLocation ,
516
519
basename = ""
517
520
) : React . ReactElement | null {
518
521
let {
@@ -543,6 +546,9 @@ function useRoutes_(
543
546
? joinPaths ( [ parentPathname , basename ] )
544
547
: parentPathname ;
545
548
549
+ let contextLocation = useLocation ( ) ;
550
+ let location = locationOverride ?? contextLocation ;
551
+
546
552
let matches = React . useMemo (
547
553
( ) => matchRoutes ( routes , location , basenameForMatching ) ,
548
554
[ location , routes , basenameForMatching ]
@@ -703,7 +709,7 @@ export function generatePath(path: string, params: Params = {}): string {
703
709
*/
704
710
export function matchRoutes (
705
711
routes : PartialRouteObject [ ] ,
706
- location : string | PartialLocation ,
712
+ location : string | Partial < Location > ,
707
713
basename = ""
708
714
) : RouteMatch [ ] | null {
709
715
if ( typeof location === "string" ) {
0 commit comments