Skip to main content

React Router Types

React Router Types Explained

React Router provides different types of routers, each designed for specific use cases. Understanding their differences helps in selecting the best one for your project.

1. BrowserRouter

BrowserRouter is the most commonly used router in React applications.

It leverages the HTML5 history API (pushState, replaceState) to manage navigation without using hash symbols (#) in the URL. This makes URLs cleaner and more user-friendly. For example, navigating to the About page results in https://example.com/about.

However, it requires a properly configured server to handle client-side routing; otherwise, refreshing a page may lead to a 404 error.

<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>

2. HashRouter

HashRouter is an alternative to BrowserRouter that manages navigation using the hash portion of the URL. This is particularly useful when deploying applications on static file servers that do not support client-side routing. The URL format includes a #, such as https://example.com/#/about, which ensures navigation works without server-side configuration.

However, this makes the URL less clean and may not be ideal for SEO.

<HashRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</HashRouter>

3. MemoryRouter

MemoryRouter keeps the navigation state in memory rather than updating the browser’s address bar.

This means the URL does not change visibly. It is commonly used for testing purposes or in environments where browser history is not needed, such as React Native applications.

<MemoryRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</MemoryRouter>

4. StaticRouter

StaticRouter is designed for server-side rendering (SSR). Unlike BrowserRouter, it does not listen for URL changes in the browser but instead receives the location as a prop. This is useful when rendering pages on the server before sending them to the client, ensuring better SEO and faster page loads.

<StaticRouter location="/about">
<App />
</StaticRouter>

Summary Table

Each router serves a unique purpose, and the choice depends on your deployment environment and requirements.

Router TypeURL ExampleBest For
BrowserRouter/aboutStandard web apps with server support
HashRouter/#/aboutStatic file hosting
MemoryRouterN/ATesting, React Native
StaticRouter/about (SSR)Server-side rendering