@@ -1287,6 +1287,7 @@ enum DataRouterStateHook {
12871287 UseRevalidator = "useRevalidator" ,
12881288 UseNavigateStable = "useNavigate" ,
12891289 UseRouteId = "useRouteId" ,
1290+ UseRoute = "useRoute" ,
12901291}
12911292
12921293function getDataRouterConsoleError (
@@ -1844,18 +1845,28 @@ function warningOnce(key: string, cond: boolean, message: string) {
18441845 }
18451846}
18461847
1847- type UseRoute < T extends keyof RouteModules > = {
1848- loaderData : GetLoaderData < RouteModules [ T ] > ;
1849- actionData : GetActionData < RouteModules [ T ] > ;
1850- } ;
1851- export function useRoute < T extends keyof RouteModules > (
1852- routeId : T ,
1853- ) : UseRoute < T > | undefined {
1848+ type UseRoute < RouteId extends keyof RouteModules > =
1849+ | {
1850+ loaderData : GetLoaderData < RouteModules [ RouteId ] > ;
1851+ actionData : GetActionData < RouteModules [ RouteId ] > ;
1852+ }
1853+ | ( RouteId extends "root" ? never : undefined ) ;
1854+
1855+ export function useRoute < RouteId extends keyof RouteModules > (
1856+ routeId ?: RouteId ,
1857+ ) : UseRoute < RouteId > {
18541858 const state = useDataRouterState ( DataRouterStateHook . UseRouteLoaderData ) ;
1855- const route = state . matches . find ( ( { route } ) => route . id === routeId ) ;
1856- if ( route === undefined ) return undefined ;
1859+
1860+ const currentRouteId : keyof RouteModules = useCurrentRouteId (
1861+ DataRouterStateHook . UseRoute ,
1862+ ) ;
1863+ const id : keyof RouteModules = routeId ?? currentRouteId ;
1864+
1865+ const route = state . matches . find ( ( { route } ) => route . id === id ) ;
1866+
1867+ if ( route === undefined ) return undefined as UseRoute < RouteId > ;
18571868 return {
1858- loaderData : state . loaderData [ routeId ] ,
1859- actionData : state . actionData ?. [ routeId ] ,
1869+ loaderData : state . loaderData [ id ] ,
1870+ actionData : state . actionData ?. [ id ] ,
18601871 } ;
18611872}
0 commit comments