Returns an object of key/value pairs of the dynamic params from the current URL that were matched by the routes. Child routes inherit all params from their parent routes.
import { useParams } from "react-router"; function SomeComponent() { let params = useParams(); params.postId; }
Assuming a route pattern like /posts/:postId
is matched by /posts/123
then params.postId
will be "123"
.
import { useParams } from "react-router"; // given a route like: <Route path="/posts/:postId" element={<Post />} />; // or a data route like: createBrowserRouter([ { path: "/posts/:postId", component: Post, }, ]); // or in routes.ts route("/posts/:postId", "routes/post.tsx");
Access the params in a component:
import { useParams } from "react-router"; export default function Post() { let params = useParams(); return <h1>Post: {params.postId}</h1>; }
Patterns can have multiple params:
"/posts/:postId/comments/:commentId";
All will be available in the params object:
import { useParams } from "react-router"; export default function Post() { let params = useParams(); return ( <h1> Post: {params.postId}, Comment: {params.commentId} </h1> ); }
Catchall params are defined with *
:
"/files/*";
The matched value will be available in the params object as follows:
import { useParams } from "react-router"; export default function File() { let params = useParams(); let catchall = params["*"]; // ... }
You can destructure the catchall param:
export default function File() { let { "*": catchall } = useParams(); console.log(catchall); }