Open In App

Mastering React Routing: Learn Navigation and Routing in React Apps

In this article, we will learn how to implement Routing in React in an efficient way by implementing various aspects of routing such as dynamic routing, programmatically routing, and other concepts.



What is Navigation in React?

Navigation means browsing between various parts of the application. In React mostly SPA(Single Page Application) are developed so Navigation is complex. We do not load new pages from the server side each time a navigation link is pressed instead routing is implemented on the client side.

To implement routing in React we do not have in-built modules but instead, we use the react-router-dom module after installing and importing it.



Syntax:

// Installing
npm i react-router-dom@6
// Importing
import { BrowserRouter } from 'react-router-dom';

Routing with no page found(error 404) error handling

Sometimes user types a URL which does not exist in the website and the router fails and shows an error. To solve this problem we create a universal Route component which redirects to Link not found page whenever incorrect URL is passed

Approach:

Example: Add the following code in respective files after removing default styling in App.css




// App.js
  
import logo from "./logo.svg";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import "./App.css";
import NavBar from "./components/Navbar";
import Home from "./components/Home";
import AboutUs from "./components/AboutUs";
import ContactUs from "./components/CotactUs";
import NoPageFound from "./components/NoPageFound";
  
function App() {
    return (
        <div className="App">
            <BrowserRouter>
                <NavBar />
                <Routes>
                    <Route exact path="/" element={<Home />} />
                    <Route exact path="/about" element={<AboutUs />} />
                    <Route exact path="/contact" element={<ContactUs />} />
                    <Route path="*" element={<NoPageFound />} />
                </Routes>
            </BrowserRouter>
        </div>
    );
}
  
export default App;




// AboutUs.js
import React from "react";
  
function AboutUs() {
    return (
        <div>
            <h2>GeeksforGeeks is a computer science portal for geeks!</h2>
            Read more about us at :
            <a href="https://www.geeksforgeeks.org/about/">
                https://www.geeksforgeeks.org/about/
            </a>
        </div>
    );
}
export default AboutUs;




// ContactUs.js
import React from "react";
  
function ContactUs() {
    return (
        <address>
            You can find us here:
            <br />
            GeeksforGeeks
            <br />
            5th & 6th Floor, Royal Kapsons, A- 118, <br />
            Sector- 136, Noida, Uttar Pradesh (201305)
        </address>
    );
}
  
export default ContactUs;




// Home.js
import React from "react";
  
function Home() {
    return <h1>Welcome to the world of Geeks!</h1>;
}
  
export default Home;




// Navbar.js
  
import { Link } from "react-router-dom";
  
export default function NavBar() {
    return (
        <div>
            <ul className="r">
                <li>
                    <Link to="/">Home</Link>
                </li>
                <li>
                    <Link to="/about">About Us</Link>
                </li>
                <li>
                    <Link to="/contact">Contact Us</Link>
                </li>
            </ul>
        </div>
    );
}




// NoPageFound.js
  
export default function NoPageFound() {
    return <h1>Error 404: Page Not Found</h1>;
}

Output:

Programmatic Navigation in React

This type of routing is used when we want to redirect the user on the basis of an action such as button click

Approach:

Example: Write the following code in respective files after removing default styling in App.css




// App.js
  
import { BrowserRouter, Routes, Route } from "react-router-dom";
import "./App.css";
import AboutUs from "./components/AboutUs";
import ContactUs from "./components/CotactUs";
  
function App() {
    return (
        <div className="App">
            <BrowserRouter>
                <Routes>
                    <Route exact path="/" element={<AboutUs />} />
                    <Route exact path="/contactus" element={<ContactUs />} />
                </Routes>
            </BrowserRouter>
        </div>
    );
}
  
export default App;




// AboutUs.js
  
import React from "react";
import { useNavigate } from "react-router-dom";
  
function AboutUs() {
    const nav = useNavigate();
    return (
        <div>
            <h2>GeeksforGeeks is a computer science portal for geeks!</h2>
            Read more about us at :
            <a href="https://www.geeksforgeeks.org/about/">
                https://www.geeksforgeeks.org/about/
            </a>
            <br></br>
            <br></br>
            <button
                onClick={() => {
                    nav("contactus");
                }}
            >
                Click Here to check contact details
            </button>
        </div>
    );
}
export default AboutUs;




// ContactUs.js
  
import React from "react";
import { useNavigate } from "react-router-dom";
  
function ContactUs() {
    const nav = useNavigate();
    return (
        <div>
            <address>
                You can find us here:
                <br />
                GeeksforGeeks
                <br />
                5th & 6th Floor, Royal Kapsons, A- 118, <br />
                Sector- 136, Noida, Uttar Pradesh (201305)
            </address>
            <br></br>
            <br></br>
            <button
                onClick={() => {
                    nav(-1);
                }}
            >
                Click Here to Go Back
            </button>
        </div>
    );
}
  
export default ContactUs;

Output:

Dynamic Routing with React router

Adding Link routes gets very lengthy when there are multiple pages, so we use the concept of Dynamic Routing to reduce the lines of code and make the code shorter

Approach:

Example: Write the following code in respective files after removing default styling in App.css




// App.js
  
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
import CourseDetails from "./components/CourseDetails";
  
function App() {
    const courses = ["JavaScript", "React", "HTML", "DSA"];
    return (
        <BrowserRouter>
            <h1>Dynamic Routing with React</h1>
            <ul>
                {courses.map((course) => {
                    return (
                        <li key={course}>
                            <Link to={`courses/${course}`}>{course}</Link>
                        </li>
                    );
                })}
            </ul>
            <Routes>
                <Route path="courses/:courseId" element={<CourseDetails />} />
            </Routes>
        </BrowserRouter>
    );
}
  
export default App;




// components/CourseDetails.js
  
import { useParams } from "react-router-dom";
  
function CourseDetails() {
    const { courseId } = useParams();
    return (
        <div>
            <h1>This is {courseId} course</h1>
        </div>
    );
}
  
export default CourseDetails;

Output:


Article Tags :