#
React (Router)
#
Install router
npm install react-router-dom
#
Adding router
HomePage is a component. The element tag takes in JSX code.
app.js
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
const router = createBrowserRouter([
{path: '/', element: <HomePage />},
{path: '/products', element: <ProductsPage/ >}
]);
function App() {
return <RouterProvider router={router}/>;
}
#
Another way of defining routes
import { createBrowserRouter, createRoutersFromElements, Route } from 'react-router-dom';
const routeDefinitions = createRoutersFromElements(
<Route>
<Route path="/" element={<HomePage/>}>
<Route path="/products" element={<ProductsPage/>}>
</Route>
)
const router = createBrowerRouter(routeDefinitions);
#
Navigating between pages
Link component prevents the browser default of sending HTTP request and load the appropriate content. It will also change the URL without sending a new HTTP request.
import { Link } from 'react-router-dom';
function HomePage() {
return (
<Link to="/products">Click me</Link>
)
}
#
Layouts and nested routes
Add an extra route to act as a wrapper
Root.js
import { Outlet } from 'react-router-dom';
function RootLayout() {
return (
<>
<Navigation/>
<Outlet/>
<>
)
}
App.js
const router = createBrowserRouter([
{
path: '/',
element: <RootLayout/ >,
children: [
{path: '/', element: <HomePage />},
{path: '/products', element: <ProductsPage/ >}
]
}
]);
#
Show error page with errorElement
Error.js
function ErrorPage() {
return (
<>
<MainNavigation />
<main>
Oops error
</main>
<>
)
}
App.js
const router = createBrowserRouter([
{
path: '/',
errorElement: <ErrorPage />,
element: <RootLayout/ >,
children: [
{path: '/', element: <HomePage />},
{path: '/products', element: <ProductsPage/ >}
]
}
]);
#
Using NavLink
For feedback for navigation.