Implementing Routing in React

  1. Installing react-roter-dom
npm install react-router-dom
  1. Setting Up Routing with createBrowserRouter

Here’s how you can set it up:

import { createBrowserRouter, RouterProvider } from "react-router-dom";

const router = createBrowserRouter([
  {
    path: "/",
    element: <Home />,
  },
  {
    path: "/about",
    element: <About />,
  },
  {
    path: "/contact",
    element: <Contact />,
  },
]);

function App() {
  return (
    <RouterProvider router={router} />
  );
}

ReactDOM.render(<App />, document.getElementById('root'));

Understanding the Code

  1. Navigating Between Routes
import React from 'react';
import { Link } from 'react-router-dom';

function Navbar() {
  return (
    <nav>
      <ul>
        <li><Link to="/">Home</Link></li>
        <li><Link to="/about">About</Link></li>
        <li><Link to="/contact">Contact</Link></li>
      </ul>
    </nav>
  );
}

export default Navbar;

Nested Routes, Outlets, and Dynamic Routing in React

  1. Nested Routes

Example:

const App = () => {
  return (
    <div className="w-full min-h-screen bg-slate-100 dark:bg-black ">
      <NavBar />
      <Outlet />
      <DarkModeToggle />
      <Footer />
    </div>
  );
};

const appRouter = createBrowserRouter([
  {
    path: "/",
    element: <App />,
    errorElement: <Error />,
    children: [
      {
        path: "/",
        element: <Body />,
      },
      {
        path: "/search",
        element: <Search />,
      },
      {
        path: "/restaurant/:id",
        element: <RestaurantMenu />,
      },
    ],
  },
]);

const root = ReactDOM.createRoot(document.querySelector("#root"));
root.render(<RouterProvider router={appRouter} />);
  1. Outlets
const App = () => {
  return (
    <div className="w-full min-h-screen bg-slate-100 dark:bg-black ">
      <NavBar />
      <Outlet />
      <Footer />
    </div>
  );
};

Error Routes

const appRouter = createBrowserRouter([
  {
    path: "/",
    element: <App />,
    errorElement: <Error />,
  },
]);

Types of Routing

Client-Side Routing

Client-side routing helps us to naviage between different components without reloading the entire page. This is commonly used in single-page applications (SPAs).

Server-Side Routing

Dynamic Routing

const router = createBrowserRouter([
   {
        path: "/restaurant/:id",
        element: <RestaurantMenu />,
   },
])

useParams Hooks

import { useParams } from 'react-router-dom';

function UserProfile() {
  const { userId } = useParams();

  return (
    <div>
      <h1>User Profile</h1>
      <p>Displaying data for user ID: {userId}</p>
    </div>
  );
}