Update dependency react-router-dom to v6.11.1
This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
react-router-dom | 6.3.0 -> 6.11.1 |
Release Notes
remix-run/react-router
v6.11.1
Patch Changes
- Updated dependencies:
react-router@6.11.1
@remix-run/router@1.6.1
v6.11.0
Minor Changes
- Enable
basename
support inuseFetcher
(#10336)- If you were previously working around this issue by manually prepending the
basename
then you will need to remove the manually prependedbasename
from yourfetcher
calls (fetcher.load('/basename/route') -> fetcher.load('/route')
)
- If you were previously working around this issue by manually prepending the
Patch Changes
- Fix inadvertent re-renders when using
Component
instead ofelement
on a route definition (#10287) - Fail gracefully on
<Link to="//">
and other invalid URL values (#10367) - Switched from
useSyncExternalStore
touseState
for internal@remix-run/router
router state syncing in<RouterProvider>
. We found some subtle bugs where router state updates got propagated before other normaluseState
updates, which could lead to footguns inuseEffect
calls. (#10377, #10409) - Add static prop to
StaticRouterProvider
's internalRouter
component (#10401) - 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 onuseLocation()
. When usingBrowserRouter
, these hooks remain unstable across location changes because they still rely onuseLocation()
. (#10336) - Updated dependencies:
react-router@6.11.0
@remix-run/router@1.6.0
v6.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 exposeduseNavigation()/useFetcher()
formMethod
fields as uppercase HTTP methods to align with thefetch()
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
-
- When
Patch Changes
- Fix
createStaticHandler
to also check forErrorBoundary
on routes in addition toerrorElement
(#10190) - Updated dependencies:
@remix-run/router@1.5.0
react-router@6.10.0
v6.9.0
Minor Changes
-
React Router now supports an alternative way to define your route
element
anderrorElement
fields as React Components instead of React Elements. You can instead pass a React Component to the newComponent
andErrorBoundary
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 doComponent
/ErrorBoundary
will "win". (#10045)Example JSON Syntax
// Both of these work the same: const elementRoutes = [{ path: '/', element: <Home />, errorElement: <HomeError />, }] const componentRoutes = [{ path: '/', Component: Home, ErrorBoundary: HomeError, }] function Home() { ... } function HomeError() { ... }
Example JSX Syntax
// Both of these work the same: const elementRoutes = createRoutesFromElements( <Route path='/' element={<Home />} errorElement={<HomeError /> } /> ); const componentRoutes = createRoutesFromElements( <Route path='/' Component={Home} ErrorBoundary={HomeError} /> ); function Home() { ... } function HomeError() { ... }
-
Introducing Lazy Route Modules! (#10045)
In order to keep your application bundles small and support code-splitting of your routes, we've introduced a new
lazy()
route property. This is an async function that resolves the non-route-matching portions of your route definition (loader
,action
,element
/Component
,errorElement
/ErrorBoundary
,shouldRevalidate
,handle
).Lazy routes are resolved on initial load and during the
loading
orsubmitting
phase of a navigation or fetcher call. You cannot lazily define route-matching properties (path
,index
,children
) since we only execute your lazy route functions after we've matched known routes.Your
lazy
functions will typically return the result of a dynamic import.// In this example, we assume most folks land on the homepage so we include that // in our critical-path bundle, but then we lazily load modules for /a and /b so // they don't load until the user navigates to those routes let routes = createRoutesFromElements( <Route path="/" element={<Layout />}> <Route index element={<Home />} /> <Route path="a" lazy={() => import("./a")} /> <Route path="b" lazy={() => import("./b")} /> </Route> );
Then in your lazy route modules, export the properties you want defined for the route:
export async function loader({ request }) { let data = await fetchData(request); return json(data); } // Export a `Component` directly instead of needing to create a React Element from it export function Component() { let data = useLoaderData(); return ( <> <h1>You made it!</h1> <p>{data}</p> </> ); } // Export an `ErrorBoundary` directly instead of needing to create a React Element from it export function ErrorBoundary() { let error = useRouteError(); return isRouteErrorResponse(error) ? ( <h1> {error.status} {error.statusText} </h1> ) : ( <h1>{error.message || error}</h1> ); }
An example of this in action can be found in the
examples/lazy-loading-router-provider
directory of the repository.🙌 Huge thanks to @rossipedia for the Initial Proposal and POC Implementation. -
Updated dependencies:
react-router@6.9.0
@remix-run/router@1.4.0
v6.8.2
Patch Changes
- Treat same-origin absolute URLs in
<Link to>
as external if they are outside of the routerbasename
(#10135) - Fix
useBlocker
to returnIDLE_BLOCKER
during SSR (#10046) - Fix SSR of absolute
<Link to>
urls (#10112) - Properly escape HTML characters in
StaticRouterProvider
serialized hydration data (#10068) - Updated dependencies:
@remix-run/router@1.3.3
react-router@6.8.2
v6.8.1
Patch Changes
- Improved absolute url detection in
Link
component (now also supportsmailto:
urls) (#9994) - Fix partial object (search or hash only) pathnames losing current path value (#10029)
- Updated dependencies:
react-router@6.8.1
@remix-run/router@1.3.2
v6.8.0
Minor Changes
-
Support absolute URLs in
<Link to>
. If the URL is for the current origin, it will still do a client-side navigation. If the URL is for a different origin then it will do a fresh document request for the new origin. (#9900)<Link to="https://neworigin.com/some/path"> {/* Document request */} <Link to="//neworigin.com/some/path"> {/* Document request */} <Link to="https://www.currentorigin.com/path"> {/* Client-side navigation */}
Patch Changes
- Fix bug with search params removal via
useSearchParams
(#9969) - Respect
preventScrollReset
on<fetcher.Form>
(#9963) - Fix navigation for hash routers on manual URL changes (#9980)
- Use
pagehide
instead ofbeforeunload
for<ScrollRestoration>
. This has better cross-browser support, specifically on Mobile Safari. (#9945) - Updated dependencies:
@remix-run/router@1.3.1
react-router@6.8.0
v6.7.0
Minor Changes
- Add
unstable_useBlocker
hook for blocking navigations within the app's location origin (#9709) - Add
unstable_usePrompt
hook for blocking navigations within the app's location origin (#9932) - Add
preventScrollReset
prop to<Form>
(#9886)
Patch Changes
- Added pass-through event listener options argument to
useBeforeUnload
(#9709) - Streamline jsdom bug workaround in tests (#9824)
- Updated dependencies:
@remix-run/router@1.3.0
react-router@6.7.0
v6.6.2
Patch Changes
- Ensure
useId
consistency during SSR (#9805) - Updated dependencies:
react-router@6.6.2
v6.6.1
Patch Changes
- Updated dependencies:
@remix-run/router@1.2.1
react-router@6.6.1
v6.6.0
Minor Changes
- Add
useBeforeUnload()
hook (#9664) - Remove
unstable_
prefix fromcreateStaticHandler
/createStaticRouter
/StaticRouterProvider
(#9738)
Patch Changes
- Proper hydration of
Error
objects fromStaticRouterProvider
(#9664) - Support uppercase
<Form method>
anduseSubmit
method values (#9664) - Skip initial scroll restoration for SSR apps with
hydrationData
(#9664) - Fix
<button formmethod>
form submission overriddes (#9664) - Updated dependencies:
@remix-run/router@1.2.0
react-router@6.6.0
v6.5.0
Patch Changes
- Updated dependencies:
react-router@6.5.0
@remix-run/router@1.1.0
v6.4.5
Patch Changes
- Updated dependencies:
@remix-run/router@1.0.5
react-router@6.4.5
v6.4.4
Patch Changes
- Fix issues with encoded characters in
NavLink
and descendant<Routes>
(#9589, #9647) - Properly serialize/deserialize
ErrorResponse
instances when using built-in hydration (#9593) - Support
basename
in static data routers (#9591) - Updated dependencies:
@remix-run/router@1.0.4
react-router@6.4.4
v6.4.3
Patch Changes
- Fix hrefs generated for
createHashRouter
(#9409) - fix encoding/matching issues with special chars (#9477, #9496)
- Properly support
index
routes with apath
inuseResolvedPath
(#9486) - Respect
relative=path
prop onNavLink
(#9453) - Fix
NavLink
behavior for root urls (#9497) - Updated dependencies:
@remix-run/router@1.0.3
react-router@6.4.3
v6.4.2
Patch Changes
- Respect
basename
inuseFormAction
(#9352) - Enhance console error messages for invalid usage of data router hooks (#9311)
- If an index route has children, it will result in a runtime error. We have strengthened our
RouteObject
/RouteProps
types to surface the error in TypeScript. (#9366) - Updated dependencies:
react-router@6.4.2
@remix-run/router@1.0.2
v6.4.1
Patch Changes
- Updated dependencies:
react-router@6.4.1
@remix-run/router@1.0.1
v6.4.0
Whoa this is a big one! 6.4.0
brings all the data loading and mutation APIs over from Remix. Here's a quick high level overview, but it's recommended you go check out the docs, especially the feature overview and the tutorial.
New APIs
- Create your router with
createMemoryRouter
/createBrowserRouter
/createHashRouter
- Render your router with
<RouterProvider>
- Load data with a Route
loader
and mutate with a Routeaction
- Handle errors with Route
errorElement
- Submit data with the new
<Form>
component - Perform in-page data loads and mutations with
useFetcher()
- Defer non-critical data with
defer
andAwait
- Manage scroll position with
<ScrollRestoration>
New Features
- Perform path-relative navigations with
<Link relative="path">
(#9160)
Bug Fixes
- Path resolution is now trailing slash agnostic (#8861)
-
useLocation
returns the scoped location inside a<Routes location>
component (#9094) - respect the
<Link replace>
prop if it is defined (#8779)
Updated Dependencies
react-router@6.4.0
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.