---
title: useRouterState
unstable: true
---
# unstable_useRouterState
[MODES: framework, data]
This API is experimental and subject to breaking changes in
minor/patch releases. Please use with caution and pay **very** close attention
to release notes for relevant changes.
## Summary
[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react-router.unstable_useRouterState.html)
A unified hook for reading router state: current (`active`) and in-flight
(`pending`) locations, search params, params, matches, and navigation type.
This hook consolidates the information you used to get from [`useLocation`](../hooks/useLocation),
[`useSearchParams`](../hooks/useSearchParams), [`useParams`](../hooks/useParams), [`useMatches`](../hooks/useMatches), [`useNavigation`](../hooks/useNavigation),
and [`useNavigationType`](../hooks/useNavigationType) into a single hook.
```tsx
import { unstable_useRouterState as useRouterState } from "react-router";
let { active, pending } = unstable_useRouterState();
// Active is always populated with the current location
active.location; // replaces `useLocation()`
active.searchParams; // replaces `useSearchParams()[0]`
active.params; // replaces `useParams()`
active.matches; // replaces `useMatches()`
active.type; // replaces `useNavigationType()`
// Pending is only populated during a navigation
pending.location; // replaces `useNavigation().location`
pending.searchParams; // equivalent to `new URLSearchParams(useNavigation().search)`
pending.params; // Not directly accessible today
pending.matches; // Not directly accessible today
pending.type; // Not directly accessible today
pending.state; // replaces `useNavigation().state`
pending.formMethod; // replaces useNavigation().formMethod
pending.formAction; // replaces useNavigation().formAction
pending.formEncType; // replaces useNavigation().formEncType
pending.formData; // replaces useNavigation().formData
pending.json; // replaces useNavigation().json
pending.text; // replaces useNavigation().text
```
## Signature
```tsx
function useRouterState(): unstable_RouterState
```
## Returns
The current router state with `active` and `pending` variants