If you were previously working around this issue by manually prepending the basename then you will need to remove the manually prepended basename from your fetcher calls (fetcher.load('/basename/route') -> fetcher.load('/route'))
When using a RouterProvider, useNavigate/useSubmit/fetcher.submit are now stable across location changes, since we can handle relative routing via the @remix-run/router instance and get rid of our dependence on useLocation() (#10336)
When using BrowserRouter, these hooks remain unstable across location changes because they still rely on useLocation()
Fetchers should no longer revalidate on search params changes or routing to the same URL, and will only revalidate on action submissions or router.revalidate calls (#10344)
Fix inadvertent re-renders when using Component instead of element on a route definition (#10287)
Fail gracefully on <Link to="//"> and other invalid URL values (#10367)
Switched from useSyncExternalStore to useState for internal @remix-run/router router state syncing in <RouterProvider>. We found some subtle bugs where router state updates got propagated before other normal useState updates, which could lead to foot guns in useEffect calls. (#10377, #10409)
Log loader/action errors caught by the default error boundary to the console in dev for easier stack trace evaluation (#10286)
Fix bug preventing rendering of descendant <Routes> when RouterProvider errors existed (#10374)
Fix detection of useNavigate in the render cycle by setting the activeRef in a layout effect, allowing the navigate function to be passed to child components and called in a useEffect there (#10394)
Allow useRevalidator() to resolve a loader-driven error boundary scenario (#10369)
Enhance LoaderFunction/ActionFunction return type to prevent undefined from being a valid return value (#10267)
Ensure proper 404 error on fetcher.load call to a route without a loader (#10345)
Decouple AbortController usage between revalidating fetchers and the thing that triggered them such that the unmount/deletion of a revalidating fetcher doesn't impact the ongoing triggering navigation/revalidation (#10271)
We recently published a post over on the Remix Blog titled "Future Proofing Your Remix App" that goes through our strategy to ensure smooth upgrades for your Remix and React Router apps going forward. React Router 6.10.0 adds support for these flags (for data routers) which you can specify when you create your router:
Fix usage of Component API within descendant <Routes> (#10434)
Fix bug when calling useNavigate from <Routes> inside a <RouterProvider> (#10432)
Fix usage of <Navigate> in strict mode when using a data router (#10435)
Updated dependencies:
@remix-run/router@1.6.1
6.11.0
Patch Changes
Log loader/action errors to the console in dev for easier stack trace evaluation (#10286)
Fix bug preventing rendering of descendant <Routes> when RouterProvider errors existed (#10374)
Fix inadvertent re-renders when using Component instead of element on a route definition (#10287)
Fix detection of useNavigate in the render cycle by setting the activeRef in a layout effect, allowing the navigate function to be passed to child components and called in a useEffect there. (#10394)
Switched from useSyncExternalStore to useState for internal @remix-run/router router state syncing in <RouterProvider>. We found some subtle bugs where router state updates got propagated before other normal useState updates, which could lead to footguns in useEffect calls. (#10377, #10409)
Allow useRevalidator() to resolve a loader-driven error boundary scenario (#10369)
Avoid unnecessary unsubscribe/resubscribes on router state changes (#10409)
When using a RouterProvider, useNavigate/useSubmit/fetcher.submit are now stable across location changes, since we can handle relative routing via the @remix-run/router instance and get rid of our dependence on useLocation(). When using BrowserRouter, these hooks remain unstable across location changes because they still rely on useLocation(). (#10336)
Updated dependencies:
@remix-run/router@1.6.0
6.10.0
Minor Changes
Added support for Future Flags in React Router. The first flag being introduced is future.v7_normalizeFormMethod which will normalize the exposed useNavigation()/useFetcher()formMethod fields as uppercase HTTP methods to align with the fetch() behavior. (#10207)
When future.v7_normalizeFormMethod === false (default v6 behavior),
useNavigation().formMethod is lowercase
useFetcher().formMethod is lowercase
When future.v7_normalizeFormMethod === true:
useNavigation().formMethod is uppercase
useFetcher().formMethod is uppercase
Patch Changes
Fix route ID generation when using Fragments in createRoutesFromElements (#10193)
Updated dependencies:
@remix-run/router@1.5.0
6.9.0
Minor Changes
React Router now supports an alternative way to define your route element and errorElement fields as React Components instead of React Elements. You can instead pass a React Component to the new Component and ErrorBoundary fields if you choose. There is no functional difference between the two, so use whichever approach you prefer 😀. You shouldn't be defining both, but if you do Component/ErrorBoundary will "win". (#10045)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps react-router from 6.4.5 to 6.11.1.
Release notes
Sourced from react-router's releases.
... (truncated)
Changelog
Sourced from react-router's changelog.
... (truncated)
Commits
db696c1
chore: Update version for release (#10443)b725c3b
chore: Update version for release (pre) (#10436)c4e9607
Fix usage of Navigate in strict mode when using a data router (#10435)5e195ec
Fix useNAvigate when called from <Routes> inside a <RouterProvider> (#10432)666d962
Fix usage of Component API within descendant routes (#10434)7ff51c0
chore: Update version for release (#10414)5ec9f8e
chore: Update version for release (pre) (#10410)f4a452b
Avoid unnecessary router subscribes (#10409)82ca7c0
chore: Update version for release (pre) (#10402)bf8ee9d
chore: Update version for release (pre) (#10398)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)