@@ -6,7 +6,6 @@ import type {
66 InitialEntry ,
77 Location ,
88 MemoryHistory ,
9- PartialLocation ,
109 Path ,
1110 State ,
1211 To ,
@@ -250,10 +249,15 @@ export function Router({
250249 ) ;
251250}
252251
252+ interface PartialLocation < S extends State = State >
253+ extends Omit < Partial < Location < S > > , "pathname" > {
254+ pathname : string ;
255+ }
256+
253257export interface RoutesProps {
254258 basename ?: string ;
255259 children ?: React . ReactNode ;
256- location ?: Location ;
260+ location ?: PartialLocation ;
257261}
258262
259263/**
@@ -268,8 +272,7 @@ export function Routes({
268272 location
269273} : RoutesProps ) : React . ReactElement | null {
270274 let routes = createRoutesFromChildren ( children ) ;
271- let location_ = useLocation ( ) ;
272- return useRoutes_ ( routes , location ?? location_ , basename ) ;
275+ return useRoutes_ ( routes , location , basename ) ;
273276}
274277
275278///////////////////////////////////////////////////////////////////////////////
@@ -492,7 +495,8 @@ export function useResolvedPath(to: To): Path {
492495 */
493496export function useRoutes (
494497 partialRoutes : PartialRouteObject [ ] ,
495- basename = ""
498+ basename = "" ,
499+ location ?: PartialLocation
496500) : React . ReactElement | null {
497501 invariant (
498502 useInRouterContext ( ) ,
@@ -501,7 +505,6 @@ export function useRoutes(
501505 `useRoutes() may be used only in the context of a <Router> component.`
502506 ) ;
503507
504- let location = useLocation ( ) ;
505508 let routes = React . useMemo (
506509 ( ) => createRoutesFromArray ( partialRoutes ) ,
507510 [ partialRoutes ]
@@ -512,7 +515,7 @@ export function useRoutes(
512515
513516function useRoutes_ (
514517 routes : RouteObject [ ] ,
515- location : Location ,
518+ locationOverride ?: PartialLocation ,
516519 basename = ""
517520) : React . ReactElement | null {
518521 let {
@@ -543,6 +546,9 @@ function useRoutes_(
543546 ? joinPaths ( [ parentPathname , basename ] )
544547 : parentPathname ;
545548
549+ let contextLocation = useLocation ( ) ;
550+ let location = locationOverride ?? contextLocation ;
551+
546552 let matches = React . useMemo (
547553 ( ) => matchRoutes ( routes , location , basenameForMatching ) ,
548554 [ location , routes , basenameForMatching ]
@@ -703,7 +709,7 @@ export function generatePath(path: string, params: Params = {}): string {
703709 */
704710export function matchRoutes (
705711 routes : PartialRouteObject [ ] ,
706- location : string | PartialLocation ,
712+ location : string | Partial < Location > ,
707713 basename = ""
708714) : RouteMatch [ ] | null {
709715 if ( typeof location === "string" ) {
0 commit comments