useRouteLoaderData

Accessing Parent Route Data

Child routes can access loader data from parent routes using useRouteLoaderData. This is useful for sharing data like user info, config, or any data loaded by a parent without needing to reload it.

Parent Route

This parent route has a loader that fetches shared data. The child route below accesses this data using useRouteLoaderData("/features/data/parent-data").

Child Route (No Loader)

This child route does not have its own loader. Instead, it accesses the parent route's loader data using useRouteLoaderData with the parent's route ID.

Data from Parent Loader

Parent Message
Hello from parent loader!
Loaded At
2026-01-11T20:42:16.713Z
Theme
dark
Version
1.0.0

Parent Route Code

Example Code

// routes/features/data/parent-data/main.tsx
import { Outlet } from "react-router";
import type { RouteLoaderArgs } from "@udibo/juniper";

export interface ParentLoaderData {
  parentMessage: string;
  loadedAt: string;
  sharedConfig: { theme: string; version: string };
}

export async function loader(_args: RouteLoaderArgs): Promise<ParentLoaderData> {
  return {
    parentMessage: "Hello from parent loader!",
    loadedAt: new Date().toISOString(),
    sharedConfig: { theme: "dark", version: "1.0.0" },
  };
}

export default function ParentLayout() {
  return (
    <div>
      <h2>Parent Route</h2>
      <Outlet />
    </div>
  );
}

Child Route Code

Example Code

// routes/features/data/parent-data/index.tsx
import { useRouteLoaderData } from "react-router";
import type { ParentLoaderData } from "./main.tsx";

export default function ChildRoute() {
  // Use the parent route's path as the route ID
  const parentData = useRouteLoaderData(
    "/features/data/parent-data"
  ) as ParentLoaderData;

  return (
    <div>
      <p>Message: {parentData.parentMessage}</p>
      <p>Theme: {parentData.sharedConfig.theme}</p>
    </div>
  );
}

Note: With path-based route IDs, accessing parent data is intuitive—just use the parent route's URL path as the ID. This makes your code more readable and maintainable.