With React Router, you have two options for creating nested routes. The first is using the /* with nested <Routes> pattern and the second is using the <Outlet /> pattern.
To add the link in the menu, use the <NavLink /> component by react-router-dom . The NavLink component provides a declarative way to navigate around the application. It is similar to the Link component, except it can apply an active style to the link if it is active.
The primary difference between them lies in their usage. React Router DOM is for web applications and React Router Native is for mobile applications made with React Native.
Using react-router-dom to Change URL Path and Render Components. The react-router-dom package is great for rendering different React components based on the url path. Therefore, React components can lead to others by changing the url path.
in react-router v4 relative paths are supported. The history
library resolves relative paths 'just like a browser would' so that a
<Link to="two" />
or a
history.push({ pathname: '..', search: 'foo=bar' });
at the url site.com/path/one
will redirect to site.com/path/two
and site.com/three?foo=bar
.
However NavLink
does not work with relative pathnames because it doesn't resolve it's own relative path (which is nontrivial to do). However there are some community packages for this, but I haven't tested them.
Alternatively, and this is what I do, you can get a match
object from your parent Route (or from the context router.route.match
) and use it to build your relative to
in NavLink:
<NavLink to={`${match.url}/three`} />
this way your component can work independent of it's parent Route(s).
It is not supported, but you can easily generate an absolute path:
<Link to={this.props.location.pathname + '/path3'}>
As per the API documentation, links must be absolute:
The to
property of a Link
must be a location descriptor, which is either a string (where it's explicitly stated that
relative paths are not supported
), or an object with a pathname
property, which is absolute (by its definition), too.
There is an open issue discussing relative links, which seems to indicate that relative paths may be supported in future.
Everything said here applies to react-router
version 2.x and above.
Yes. Use the react-router-relative-links library. It was written by Ryan Florence, one of the original authors of react-router.
To use your example, you'd want to use:
{ RelativeLink } = require 'react-router-relative-links'
...
<RelativeLink to="./path3">My link text</RelativeLink>
Actually react-router support relative links.
Given URL like /clients/invoice/123 the behaviour is:
https://github.com/ReactTraining/react-router/issues/5127
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With