router

What is Router in React ?

  • Profile picture of Mcs
  • by Mcs July 8, 2025

1. Intro to React Router

React Router is the standard routing library for React. It allows your app to behave like a multi-page app by enabling navigation between different components without reloading the page.

Benefits:

  1. Fast navigation (SPA behavior)
  2. Route-based code splitting
  3. Dynamic URLs (/user/:id)
  4. Nested routes

2. Installing React Router (Third-Party Package)

npm install react-router-dom

Then, in your App.js, wrap your app in BrowserRouter:

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

function App() {
 return (
   <BrowserRouter>
     {/* Your Routes */}
   </BrowserRouter>
 );
}

3. Working with Router

Basic Setup

import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
import AddUser from './pages/AddUser';

function App() {
 return (
   <BrowserRouter>
     <nav>
       <Link to="/">Home</Link> | 
       <Link to="/about">About</Link> | 
       <Link to="/add-user">Add User</Link>
     </nav>

     <Routes>
       <Route path="/" element={<Home />} />
       <Route path="/about" element={<About />} />
       <Route path="/add-user" element={<AddUser />} />
     </Routes>
   </BrowserRouter>
 );
}

4. Sending Data to Another Page

Using useNavigate + state (preferred)

// Page1.jsx
import { useNavigate } from 'react-router-dom';

const Page1 = () => {
 const navigate = useNavigate();
 const user = { name: "Jigar", age: 25 };

 const goToDetails = () => {
   navigate('/details', { state: user });
 };

 return <button onClick={goToDetails}>Go to Details</button>;
};

// Details.jsx
import { useLocation } from 'react-router-dom';

const Details = () => {
 const location = useLocation();
 const { name, age } = location.state || {};

 return (
   <div>
     <h3>Name: {name}</h3>
     <p>Age: {age}</p>
   </div>
 );
};

5. CRUD Operation with Routing

We’ll simulate a basic user list with Add/Edit/Delete and use routing for each action.

Pages

  1. UserList.jsx – Read all users
  2. AddUser.jsx – Create new user
  3. EditUser.jsx – Update user
  4. Delete directly from list

App Routes

<Routes>
 <Route path="/" element={<UserList />} />
 <Route path="/add-user" element={<AddUser />} />
 <Route path="/edit-user/:id" element={<EditUser />} />
</Routes>

UserList.jsx

import { Link, useNavigate } from 'react-router-dom';
import { useState } from 'react';

const UserList = () => {
 const navigate = useNavigate();
 const [users, setUsers] = useState([
   { id: 1, name: "John" },
   { id: 2, name: "Jane" },
 ]);

 const deleteUser = (id) => {
   setUsers(users.filter(user => user.id !== id));
 };

 return (
   <div>
     <h2>Users</h2>
     <Link to="/add-user">Add New</Link>
     <ul>
       {users.map(user => (
         <li key={user.id}>
           {user.name} {" "}
           <button onClick={() => navigate(`/edit-user/${user.id}`)}>Edit</button>
           <button onClick={() => deleteUser(user.id)}>Delete</button>
         </li>
       ))}
     </ul>
   </div>
 );
};

AddUser.jsx

import { useNavigate } from 'react-router-dom';
import { useState } from 'react';

const AddUser = () => {
 const navigate = useNavigate();
 const [name, setName] = useState("");

 const handleSubmit = (e) => {
   e.preventDefault();
   // Normally: send data to backend
   console.log("User Added:", name);
   navigate('/');
 };

 return (
   <form onSubmit={handleSubmit}>
     <input value={name} onChange={(e) => setName(e.target.value)} placeholder="Enter name" />
     <button type="submit">Add</button>
   </form>
 );
};

EditUser.jsx

import { useParams, useNavigate } from 'react-router-dom';
import { useState } from 'react';

const EditUser = () => {
 const { id } = useParams();
 const navigate = useNavigate();
 const [name, setName] = useState("");

 const handleUpdate = (e) => {
   e.preventDefault();
   // Normally: update user by ID
   console.log("User Updated:", id, name);
   navigate('/');
 };

 return (
   <form onSubmit={handleUpdate}>
     <h3>Editing User ID: {id}</h3>
     <input value={name} onChange={(e) => setName(e.target.value)} placeholder="Update name" />
     <button type="submit">Update</button>
   </form>
 );
};

Summary

FeatureTechnique
Routing setupBrowserRouter, Routes, Route
NavigationLink, useNavigate()
Passing data to pageuseNavigate(..., { state })
Reading URL paramsuseParams()
CRUD operation with routingSplit into multiple pages via routes

Comments

Add new comment

Restricted HTML

  • Allowed HTML tags: <br> <p> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <cite> <dl> <dt> <dd> <a hreflang href> <blockquote cite> <ul type> <ol type start> <strong> <em> <code> <li>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.