UNPKG

react-page-routes

Version:

Simplify coding your react-router-dom <Routes/> and <NavLinks/> by using attributes in your component.

124 lines (91 loc) 2.94 kB
# react-page-routes Simplify coding your `react-router-dom` `<Routes/>` and `<NavLinks/>` by using attributes in your component. ## How it works You provide page components containing `title` and `path` attributes, and pass them to the package as an array. The package will map the pages to a React-Router component and handle setup for both react router-routes and react-router links. ## Setup ### Install ```shell npm install react-page-routes ``` Install react-router-dom and prepare a context provider in a parent component: ```shell npm install react-router-dom ``` ```javascript // index.tsx import { BrowserRouter } from "react-router-dom"; ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( <BrowserRouter> <App /> </BrowserRouter> ); ``` ### 1. Create Page Components Add both `path` and `title` attributes to all of your Page Components. ```javascript Shop.path = '/shop' Shop.title = 'Shop Now!' export default function Shop() { return <h1>Shop Now Page</h1> } ``` The `path` will be provided to `<Route path={}>` in the `Pages` component and `<NavLink to={}>` in the `NavBar` component. The `title` will be provided to `<NavLink>{title}</Navlink>` in the `NavBar` component ### 2. Create a directory index of all pages 1. Create `Directory.ts` file. 2. Import the `directory` function. 3. Import all of your page components 4. Invoke the `directory` function, passing all of your page components as props. 5. `export default` the results ```javascript // Directory.ts import { routes } from 'react-page-routes' import Home from './Pages/Home' import Shop from './Pages/Shop' export default routes( Home, Shop, // <- add in any additional Page Components here. ) ``` ### 3. Use in your App 1. Import the `Directory.ts` file from step 2 2. Use the `Navbar` for handling `<NavLinks/>` 3. Use `Pages` for handling react-router `<Routes/>` ```javascript // App.tsx import { Directory } from './Directory' function App() { return ( <div> <Directory.NavBar /> <Directory.Pages /> </div> ) } ``` ### 4. Customize with a Mapper Function (Optional) ```javascript // App.tsx import { Directory } from './Directory' const MyCustomPagesMapper = (E) => ( <Route element={<E />} path={'path' in E ? String(E.path) : ''} key={String(E.name)} /> ) const MyCustomNavBarMapper = (E) => ( <NavLink key={E.path.toString()} to={E.path.toString()}> {E.title} </NavLink> ) function App() { return ( <div> <Directory.NavBar map={MyCustomNavBarMapper} /> <Directory.Pages map={MyCustomPagesMapper} /> </div> ) } ``` ### Done Thanks for trying out this package. Additional questions/ideas/suggestions/contributions are welcome. Visit the [github repository issues page](https://github.com/Jonathan-Dobson/react-page-routes/issues), please select relevant [Labels](https://github.com/Jonathan-Dobson/react-page-routes/labels)