A progressively enhanced <a href>
wrapper to enable navigation with client-side routing.
import { Link } from "react-router";
<Link to="/dashboard">Dashboard</Link>;
<Link
to={{
pathname: "/some/path",
search: "?query=string",
hash: "#hash",
}}
/>;
Defines the link discovery behavior
<Link /> // default ("render")
<Link discover="render" />
<Link discover="none" />
Defines the data and module prefetching behavior for the link.
<Link /> // default
<Link prefetch="none" />
<Link prefetch="intent" />
<Link prefetch="render" />
<Link prefetch="viewport" />
Prefetching is done with HTML <link rel="prefetch">
tags. They are inserted after the link.
<a href="..." />
<a href="..." />
<link rel="prefetch" /> // might conditionally render
Because of this, if you are using nav :last-child
you will need to use
nav :last-of-type
so the styles don't conditionally fall off your last link
(and any other similar selectors).
Prevents the scroll position from being reset to the top of the window when
the link is clicked and the app is using ScrollRestoration
. This only
prevents new locations resetting scroll to the top, scroll position will be
restored for back/forward button navigation.
<Link to="?tab=one" preventScrollReset />
Defines the relative path behavior for the link.
<Link to=".." /> // default: "route"
<Link relative="route" />
<Link relative="path" />
Consider a route hierarchy where a parent route pattern is "blog"
and a child
route pattern is "blog/:slug/edit"
.
".."
will remove both :slug/edit
segments
back to "/blog"
.".."
will only remove one URL segment up
to "/blog/:slug"
Note that index routes and layout routes do not have paths so they are not included in the relative path calculation.
Will use document navigation instead of client side routing when the link is
clicked: the browser will handle the transition normally (as if it were an
<a href>
).
<Link to="/logout" reloadDocument />
Replaces the current entry in the History
stack instead of pushing a new one onto it.
<Link replace />
# with a history stack like this
A -> B
# normal link click pushes a new entry
A -> B -> C
# but with `replace`, B is replaced by C
A -> C
Adds persistent client side routing state to the next location.
<Link to="/somewhere/else" state={{ some: "value" }} />
The location state is accessed from the location
.
function SomeComp() {
const location = useLocation();
location.state; // { some: "value" }
}
This state is inaccessible on the server as it is implemented on top of
history.state
Can be a string or a partial Path
:
<Link to="/some/path" />
<Link
to={{
pathname: "/some/path",
search: "?query=string",
hash: "#hash",
}}
/>
Enables a View Transition for this navigation.
<Link to={to} viewTransition>
Click me
</Link>
To apply specific styles for the transition, see useViewTransitionState