Last updated: Apr 7, 2024
Reading timeยท3 min
Use the window
object to get the current URL in React, e.g.
window.location.href
returns a string containing the whole URL. If you need to
access the path, use window.location.pathname
.
The pathname
property returns a string containing the path of the URL for
the location.
export default function App() { // ๐๏ธ http://localhost:3001/about console.log(window.location.href); // ๐๏ธ /about console.log(window.location.pathname); // ๐๏ธ http: console.log(window.location.protocol); // localhost console.log(window.location.hostname); return ( <div> <div> <h2>Current URL ๐๏ธ {window.location.href}</h2> <h2>Current Pathname ๐๏ธ {window.location.pathname}</h2> <h2>Current Protocol ๐๏ธ {window.location.protocol}</h2> <h2>Current hostname ๐๏ธ {window.location.hostname}</h2> </div> </div> ); }
We can get the full, current URL and the pathname on the window.location object.
// ๐๏ธ without React router // ๐๏ธ http://localhost:3001/about console.log(window.location.href); // ๐๏ธ /about console.log(window.location.pathname); // ๐๏ธ http: console.log(window.location.protocol); // ๐๏ธ localhost console.log(window.location.hostname);
location.href -
returns a string containing the whole URL and allows the href
to be updated.
location.pathname - returns a string containing the path of the URL for the location which is an empty string if there is no path.
location.protocol -
returns the protocol of the location - http:
or https:
.
location.hostname - returns the domain of the URL.
Use the useLocation()
hook to get the current route with React Router. The
hook returns the current location
object.
For example, you can access the pathname as location.pathname
.
import React from 'react'; import {Route, Link, Routes, useLocation} from 'react-router-dom'; export default function App() { const location = useLocation(); console.log('hash', location.hash); console.log('pathname', location.pathname); console.log('search', location.search); return ( <div> <div> <h2>Current Pathname ๐๏ธ {location.pathname}</h2> <h2>Current Search params ๐๏ธ {location.search}</h2> <h2>Current Hash ๐๏ธ {location.hash}</h2> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/users?page=10">Users</Link> </li> <li> <Link to="/users?page=10#myHash">Users with hash</Link> </li> </ul> </nav> <Routes> <Route path="/about" element={<About />} /> <Route path="/" element={<Home />} /> </Routes> </div> </div> ); } function Home() { return <h2>Home</h2>; } function About() { return <h2>About</h2>; }
We used the useLocation hook to get the current location object.
Some of the properties you can access on the location
object are:
pathname
- the current pathname, e.g. /users
search
- the current query string, e.g. ?page=10
hash
- the current hash, e.g. #example
.https://bobbyhadz.com
, use window.location.href
instead.// ๐๏ธ https://bobbyhadz.com console.log(window.location.href);
If you use this approach, make sure to wrap your application in a Router
component in your index.js
file.
import {createRoot} from 'react-dom/client'; import App from './App'; import {BrowserRouter as Router} from 'react-router-dom'; const rootElement = document.getElementById('root'); const root = createRoot(rootElement); // ๐๏ธ Wrap the App component in a Router root.render( <Router> <App /> </Router> );
Router
component is in your index.js
file because that's the entry point of your React application.Once your entire app is wrapped with a Router
component, you can use any of
the hooks from the React router package anywhere in your components.
If you have a dynamic route and are trying to access its ID, use the useParams hook.
import React from 'react'; import {Route, Link, Routes, useParams} from 'react-router-dom'; function Users() { // ๐๏ธ get ID from the URL const params = useParams(); console.log(params); // ๐๏ธ {userId: '12345'} return <h2>userId is ๐๏ธ {params.userId}</h2>; } export default function App() { return ( <div> <div> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> {/* ๐๏ธ link to dynamic path */} <Link to="/users/12345">Users</Link> </li> </ul> </nav> <Routes> <Route path="/about" element={<About />} /> {/* ๐๏ธ handle dynamic path */} <Route path="/users/:userId" element={<Users />} /> <Route path="/" element={<Home />} /> </Routes> </div> </div> ); } function Home() { return <h2>Home</h2>; } function About() { return <h2>About</h2>; }
The useParams
hook returns an object of key-value pairs of the dynamic params
from the current URL that were matched by the <Route path>
.
const params = useParams();
Notice that we set a dynamic path
prop on the Route
component that renders
the Users
component - <Route path="/users/:userId" element={<Users />} />
.
When the visitor navigates to /users/some-id
, we can use the useParams
hook
to get the ID.
function Users() { // ๐๏ธ get the ID from the URL const params = useParams(); console.log(params); // ๐๏ธ {userId: '12345'} return <h2>userId is ๐๏ธ {params.userId}</h2>; }
The route would match anything after /users/
, e.g. /users/123
or
/users/asdf
.