Skip to content

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Sep 17, 2025

This PR contains the following updates:

Package Change Age Confidence
react-router (source) 7.8.2 -> 7.9.4 age confidence

Release Notes

remix-run/react-router (react-router)

v7.9.4

Compare Source

Patch Changes
  • handle external redirects in from server actions (#​14400)

  • New (unstable) useRoute hook for accessing data from specific routes (#​14407)

    For example, let's say you have an admin route somewhere in your app and you want any child routes of admin to all have access to the loaderData and actionData from admin.

    // app/routes/admin.tsx
    import { Outlet } from "react-router";
    
    export const loader = () => ({ message: "Hello, loader!" });
    
    export const action = () => ({ count: 1 });
    
    export default function Component() {
      return (
        <div>
          {/* ... */}
          <Outlet />
          {/* ... */}
        </div>
      );
    }

    You might even want to create a reusable widget that all of the routes nested under admin could use:

    import { unstable_useRoute as useRoute } from "react-router";
    
    export function AdminWidget() {
      // How to get `message` and `count` from `admin` route?
    }

    In framework mode, useRoute knows all your app's routes and gives you TS errors when invalid route IDs are passed in:

    export function AdminWidget() {
      const admin = useRoute("routes/dmin");
      //                      ^^^^^^^^^^^
    }

    useRoute returns undefined if the route is not part of the current page:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
    }

    Note: the root route is the exception since it is guaranteed to be part of the current page.
    As a result, useRoute never returns undefined for root.

    loaderData and actionData are marked as optional since they could be accessed before the action is triggered or after the loader threw an error:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
      const { loaderData, actionData } = admin;
      console.log(loaderData);
      //          ^? { message: string } | undefined
      console.log(actionData);
      //          ^? { count: number } | undefined
    }

    If instead of a specific route, you wanted access to the current route's loaderData and actionData, you can call useRoute without arguments:

    export function AdminWidget() {
      const currentRoute = useRoute();
      currentRoute.loaderData;
      currentRoute.actionData;
    }

    This usage is equivalent to calling useLoaderData and useActionData, but consolidates all route data access into one hook: useRoute.

    Note: when calling useRoute() (without a route ID), TS has no way to know which route is the current route.
    As a result, loaderData and actionData are typed as unknown.
    If you want more type-safety, you can either narrow the type yourself with something like zod or you can refactor your app to pass down typed props to your AdminWidget:

    export function AdminWidget({
      message,
      count,
    }: {
      message: string;
      count: number;
    }) {
      /* ... */
    }

v7.9.3

Compare Source

Patch Changes
  • Do not try to use turbo-stream to decode CDN errors that never reached the server (#​14385)

    • We used to do this but lost this check with the adoption of single fetch
  • Fix Data Mode regression causing a 404 during initial load in when middleware exists without any loader functions (#​14393)

v7.9.2

Compare Source

Patch Changes
    • Update client-side router to run client middleware on initial load even if no loaders exist (#​14348)
    • Update createRoutesStub to run route middleware
      • You will need to set the <RoutesStub future={{ v8_middleware: true }} /> flag to enable the proper context type
  • Update Lazy Route Discovery manifest requests to use a singular comma-separated paths query param instead of repeated p query params (#​14321)

    • This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes
    • If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits
  • [UNSTABLE] Add fetcher.unstable_reset() API (#​14206)

  • Made useOutlet element reference have stable identity in-between route chages (#​13382)

  • feat: enable full transition support for the rsc router (#​14362)

  • In RSC Data Mode, handle SSR'd client errors and re-try in the browser (#​14342)

  • Support middleware prop on <Route> for usage with a data router via createRoutesFromElements (#​14357)

  • Handle encoded question mark and hash characters in ancestor splat routes (#​14249)

  • Fail gracefully on manifest version mismatch logic if sessionStorage access is blocked (#​14335)

v7.9.1

Compare Source

Patch Changes
  • Fix internal Future interface naming from middleware -> v8_middleware (#​14327)

v7.9.0

Compare Source

Minor Changes
Patch Changes
  • Escape HTML in meta() JSON-LD content (#​14316)
  • Add react-server Await component implementation (#​14261)
  • In RSC Data Mode when using a custom basename, fix hydration errors for routes that only have client loaders (#​14264)
  • Make href function available in a react-server context (#​14262)
  • decode each time getPayload() is called to allow for "in-context" decoding and hoisting of contextual assets (#​14248)
  • href() now correctly processes routes that have an extension after the parameter or are a single optional parameter. (#​13797)

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot added the dependencies This pull request updates dependency files label Sep 17, 2025
@renovate renovate bot changed the title fix(deps): update dependency react-router to v7.9.0 fix(deps): update dependency react-router to v7.9.1 Sep 17, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 6e06ef7 to dbf1db1 Compare September 18, 2025 05:39
@coveralls
Copy link

Pull Request Test Coverage Report for Build 17819178347

Details

  • 0 of 0 changed or added relevant lines in 0 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage remained the same at 42.462%

Totals Coverage Status
Change from base Build 17819137218: 0.0%
Covered Lines: 21065
Relevant Lines: 51962

💛 - Coveralls

@renovate renovate bot force-pushed the renovate/react-router-monorepo branch 2 times, most recently from 5069a0f to 1d0dcc5 Compare September 25, 2025 15:10
@renovate renovate bot changed the title fix(deps): update dependency react-router to v7.9.1 chore(deps): update dependency react-router to v7.9.1 Sep 25, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 1d0dcc5 to 8d5075a Compare September 29, 2025 16:59
@renovate renovate bot changed the title chore(deps): update dependency react-router to v7.9.1 chore(deps): update dependency react-router to v7.9.2 Sep 29, 2025
@renovate renovate bot changed the title chore(deps): update dependency react-router to v7.9.2 chore(deps): update dependency react-router to v7.9.3 Oct 1, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 8d5075a to 0cb6a19 Compare October 13, 2025 18:48
@renovate renovate bot changed the title chore(deps): update dependency react-router to v7.9.3 chore(deps): update dependency react-router to v7.9.4 Oct 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies This pull request updates dependency files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant