DEV Community

Cover image for React Router for Single Page Applications
Suhas Palani
Suhas Palani

Posted on

React Router for Single Page Applications

Introduction

React Router is a powerful library for managing navigation and routing in React applications. It allows developers to create a multi-page feel in a single-page application (SPA) by managing the browser's history and rendering components based on the URL. This week, we'll delve into the fundamentals of React Router, including setting it up, defining routes, and using navigation links.

Importance of React Router

React Router is essential for creating dynamic and user-friendly SPAs. It helps manage different views and user interactions within a single-page application, providing a seamless experience similar to traditional multi-page applications.

Setting Up React Router

Installing React Router:

  • Command to Install:
  npm install react-router-dom
Enter fullscreen mode Exit fullscreen mode

Setting Up the Router:

  • Basic Setup:
  import React from 'react';
  import ReactDOM from 'react-dom';
  import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
  import App from './App';
  import About from './About';
  import Contact from './Contact';

  ReactDOM.render(
      <Router>
          <Switch>
              <Route exact path="/" component={App} />
              <Route path="/about" component={About} />
              <Route path="/contact" component={Contact} />
          </Switch>
      </Router>,
      document.getElementById('root')
  );
Enter fullscreen mode Exit fullscreen mode

Defining Routes

Basic Route Definition:

  • Example:
  import React from 'react';
  import { Route, Switch } from 'react-router-dom';
  import Home from './Home';
  import About from './About';
  import Contact from './Contact';

  function App() {
      return (
          <div>
              <Switch>
                  <Route exact path="/" component={Home} />
                  <Route path="/about" component={About} />
                  <Route path="/contact" component={Contact} />
              </Switch>
          </div>
      );
  }

  export default App;
Enter fullscreen mode Exit fullscreen mode

Nested Routes:

  • Example:
  import React from 'react';
  import { Route, Switch, Link } from 'react-router-dom';
  import Profile from './Profile';
  import Settings from './Settings';

  function Dashboard() {
      return (
          <div>
              <h2>Dashboard</h2>
              <ul>
                  <li><Link to="/dashboard/profile">Profile</Link></li>
                  <li><Link to="/dashboard/settings">Settings</Link></li>
              </ul>
              <Switch>
                  <Route path="/dashboard/profile" component={Profile} />
                  <Route path="/dashboard/settings" component={Settings} />
              </Switch>
          </div>
      );
  }

  export default Dashboard;
Enter fullscreen mode Exit fullscreen mode

Navigation Links

Using Link and NavLink:

  • Link Component:
  import React from 'react';
  import { Link } from 'react-router-dom';

  function Navigation() {
      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 Navigation;
Enter fullscreen mode Exit fullscreen mode
  • NavLink Component:
  import React from 'react';
  import { NavLink } from 'react-router-dom';

  function Navigation() {
      return (
          <nav>
              <ul>
                  <li><NavLink exact to="/" activeClassName="active">Home</NavLink></li>
                  <li><NavLink to="/about" activeClassName="active">About</NavLink></li>
                  <li><NavLink to="/contact" activeClassName="active">Contact</NavLink></li>
              </ul>
          </nav>
      );
  }

  export default Navigation;
Enter fullscreen mode Exit fullscreen mode

Programmatic Navigation

Navigating Programmatically:

  • Using history.push:
  import React from 'react';
  import { useHistory } from 'react-router-dom';

  function Home() {
      const history = useHistory();

      const navigateToAbout = () => {
          history.push('/about');
      };

      return (
          <div>
              <h1>Home Page</h1>
              <button onClick={navigateToAbout}>Go to About Page</button>
          </div>
      );
  }

  export default Home;
Enter fullscreen mode Exit fullscreen mode

Route Parameters

Using Route Parameters:

  • Example:
  import React from 'react';
  import { useParams } from 'react-router-dom';

  function User() {
      let { id } = useParams();
      return <h2>User ID: {id}</h2>;
  }

  function App() {
      return (
          <div>
              <Switch>
                  <Route path="/user/:id" component={User} />
              </Switch>
          </div>
      );
  }

  export default App;
Enter fullscreen mode Exit fullscreen mode

Redirects and Not Found Pages

Handling Redirects:

  • Example:
  import React from 'react';
  import { Redirect } from 'react-router-dom';

  function Home() {
      return <Redirect to="/about" />;
  }

  export default Home;
Enter fullscreen mode Exit fullscreen mode

Creating a Not Found Page:

  • Example:
  import React from 'react';
  import { Route, Switch } from 'react-router-dom';
  import Home from './Home';
  import About from './About';
  import Contact from './Contact';
  import NotFound from './NotFound';

  function App() {
      return (
          <div>
              <Switch>
                  <Route exact path="/" component={Home} />
                  <Route path="/about" component={About} />
                  <Route path="/contact" component={Contact} />
                  <Route component={NotFound} />
              </Switch>
          </div>
      );
  }

  export default App;
Enter fullscreen mode Exit fullscreen mode

Conclusion

React Router is a fundamental tool for building SPAs with React, providing a way to navigate and manage different views efficiently. Understanding React Router is crucial for any React developer looking to create dynamic and user-friendly applications.

Resources for Further Learning

  • Online Courses: Platforms like Udemy, Pluralsight, and freeCodeCamp offer comprehensive courses on React Router.
  • Books: "React Router Quick Start Guide" by Sasan Seydnejad.
  • Documentation and References: The official React Router documentation is an excellent resource.
  • Communities: Join developer communities on platforms like Stack Overflow, Reddit, and GitHub for support and networking.

Top comments (0)