Skip to content

Commit a01a87f

Browse files
committed
useRoute: use current route ID when route ID is not provided
1 parent e63a25c commit a01a87f

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

packages/react-router/lib/hooks.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,7 @@ enum DataRouterStateHook {
12871287
UseRevalidator = "useRevalidator",
12881288
UseNavigateStable = "useNavigate",
12891289
UseRouteId = "useRouteId",
1290+
UseRoute = "useRoute",
12901291
}
12911292

12921293
function 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

Comments
 (0)