DEV Community

Cover image for Mastering State Management in React Router: Storing and Retrieving State in URLs
Cybermaxi7
Cybermaxi7

Posted on • Updated on

Mastering State Management in React Router: Storing and Retrieving State in URLs

Today, I explored the fascinating realm of storing state in URLs using React Router. It's a game-changing concept that can enhance the usability and shareability of your web applications.

Why Store State in the URL? 🌐

The URL isn't just a path to your web pages; it's a versatile tool for managing UI state. Consider scenarios like toggling panels, sorting lists, or applying filters. Storing this information in the URL has compelling advantages:

  1. Global Accessibility: State stored in the URL becomes globally accessible to all components within your app.

  2. Data Persistence: Seamlessly pass data from one page to another, preserving the context effortlessly.

  3. Bookmark and Share: Users can bookmark or share a page with its exact UI state, fostering collaboration.

Params and Query Strings in URLs 📊

When it comes to storing state in URLs, we rely on two key components: params and query strings. Let's dissect a URL to understand their role:

www.example.com/app/cities/lisbon?lat=38.2&lng=-9.4

  • app/cities: The path segment of the URL.

  • lisbon: Params, allowing for targeted data transmission.

  • lat=38.2&lng=-9.4: Query strings, perfect for global state management.

In React, we harness this power with the help of React Router's useParams().

Implementing State Storage with Dynamic Parameters 🛤️

Let's dive into some code to illustrate the concept further:

import React from 'react';
import { BrowserRouter as Router, Route, Link, useParams } from 'react-router-dom';

// Component for Page 1
function Page1() {
  // Access the "id" parameter from the URL
  const { id } = useParams();

  return (
    <div>
      <h2>Page 1</h2>
      <p>State stored in URL: {id}</p>
      <Link to="/page2">Go to Page 2</Link>
    </div>
  );
}

// Component for Page 2
function Page2() {
  return (
    <div>
      <h2>Page 2</h2>
      <Link to="/page1/123">Go to Page 1 with State</Link>
    </div>
  );
}

// App Component
function App() {
  return (
    <Router>
      <Route path="/page1/:id" component={Page1} />
      <Route path="/page2" component={Page2} />
    </Router>
  );
}

export default App;

Enter fullscreen mode Exit fullscreen mode

In this example:

  • We define a dynamic route using :id in the route path ("/page1/:id"), allowing for state changes.

  • In the Page1 component, we access the id parameter from the URL using useParams().

  • You can visit "/page1/123" to see the state stored in the URL.

  • Links within the components navigate between pages and pass state in the URL.

By following these steps, you open a world of possibilities for your React applications.

Happy coding! 🚀🔗 #React #ReactRouter #WebDevelopment #StateManagement #Frontend #CodingJourney

Top comments (0)