React route manager for react-router
Define and manage application url's in one place.
The package is distributed using npm, the node package manager.
npm i --save @lomray/react-route-manager
The TypeScript declarations require TypeScript 5.0 or newer; supported React Router versions are >=6.12.1.
The examples use React Router 7 or later. With React Router 6, import Link from
react-router-dom and RouteObject from react-router instead.
The @pages/* modules below are supplied by your application and export route components.
import { Manager } from '@lomray/react-route-manager';
import { Link, type RouteObject } from 'react-router';
/**
* Application URL manager
*/
const manager = new Manager({
routes: {
home: {
url: '/',
},
details: {
url: '/details',
children: {
user: {
url: '/user/:id',
params: { id: '' }, // id required param
},
},
},
about: {
url: '/about',
},
},
});
/**
* Now we can use it for get routes path for react-router
*/
const routes: RouteObject[] = [
{
path: manager.path('home'),
lazy: () => import('@pages/home'),
},
{
path: manager.path('details'),
children: [
{
index: true,
lazy: () => import('@pages/details'),
},
{
path: manager.path('details.user'),
lazy: () => import('@pages/details/user'),
},
],
},
{
path: manager.path('about'),
lazy: () => import('@pages/about'),
},
];
/**
* Also we can use it for generate url's
*/
const MyComponent = () => {
return (
<>
<Link to={manager.makeURL('home')}>Home page</Link>
<Link to={manager.makeURL('about')}>About page</Link>
<Link to={manager.makeURL('details')}>Details page</Link>
<Link to={manager.makeURL('details.user', { id: '1' })}>User page</Link>
</>
)
}import { Manager } from '@lomray/react-route-manager';
enum DD { First = 'first', Second = 'second' }
const manager = new Manager({
routes: {
user: {
url: '/user/:id/:kind/:status/:name?/:next?/:optionalStatus?',
params: {
id: '', // required string
kind: '' as 'aaa' | 'dddd', // required union
status: DD, // required enum
name: undefined, // optional string
next: undefined as 'aaa' | 'dddd' | undefined, // optional union
optionalStatus: undefined as DD | undefined, // optional enum
},
},
},
});
manager.makeURL('user', { id: '1', kind: 'aaa', status: DD.First });
// '/user/1/aaa/first'Required parameters must be supplied, including parameters inherited from parent routes.
Routes with only optional parameters can omit the parameter object.
Typed route keys support up to 16 segments. Repeated segment names are allowed, and a
route with children: {} still has its own key.
Explore demo app to more understand.
Bug or a feature request, please open a new issue.
Made with 💚
Published under MIT License.