useRouterState — это хук, предназначенный для получения
актуального состояния роутера и слежения за его изменениями в
компонентах React. Он предоставляет возможность читать текущее состояние
маршрутов, параметры, query-параметры и состояние загрузки без
необходимости вручную подписываться на события роутинга.
import { useRouterState } from '@tanstack/router';
const routerState = useRouterState();
После вызова хука routerState становится объектом с
ключевыми свойствами:
pathname) и параметры поиска (search).idle, loading, error,
success).Динамические сегменты маршрутов, например
/users/:userId, автоматически становятся доступными через
params.
const { params } = useRouterState();
console.log(params.userId); // выводит значение :userId из URL
Если маршрут имеет вложенные параметры, они также будут включены в
объект params по ключу каждого сегмента.
Query-параметры URL удобно получать через объект
search.
const { search } = useRouterState();
console.log(search.page); // выводит значение ?page=... из URL
Объект search автоматически парсится и поддерживает
числовые, булевы и строковые значения, если маршруты сконфигурированы с
правильными схемами.
Свойство status позволяет отслеживать состояние
асинхронных данных, связанных с маршрутом. Возможные значения:
idle — маршрут еще не загружалсяloading — данные маршрута в процессе загрузкиerror — произошла ошибка при загрузкеsuccess — данные успешно загруженыconst { status } = useRouterState();
if (status === 'loading') {
return <div>Загрузка...</div>;
}
if (status === 'error') {
return <div>Ошибка загрузки данных</div>;
}
route и matches предоставляют информацию о
текущем маршруте и всех родительских маршрутах, которые совпали с
текущим URL. Это особенно полезно для построения хлебных крошек и
вложенных навигационных элементов.
const { route, matches } = useRouterState();
console.log(route.id); // уникальный идентификатор текущего маршрута
console.log(matches.map(m => m.route.id)); // все маршруты в цепочке совпадений
Каждый элемент matches содержит:
route — сам маршрутparams — параметры этого маршрутаsearch — query-параметры, действующие на этом уровне
маршрутаstatus — состояние загрузки для конкретного
маршрутаuseRouterState идеально подходит для компонентов,
которые должны реагировать на изменение URL без повторного рендера всего
приложения. Например:
function UserProfile() {
const { params, status } = useRouterState();
if (status === 'loading') return <p>Загрузка профиля...</p>;
return <p>ID пользователя: {params.userId}</p>;
}
Это позволяет компонентам оставаться полностью реактивными к роутингу, минимизируя необходимость передачи props через контекст или другие уровни иерархии.
Хук возвращает мемоизированные объекты, чтобы избежать лишних
ререндеров. useRouterState обеспечивает локальное слежение
за состоянием маршрута, что делает его особенно полезным в больших
приложениях с глубокими вложенными маршрутами.
idle, loading, error,
success)useRouterState превращает чтение состояния роутера в
удобный и эффективный инструмент, позволяя компонентам React быть
полностью синхронизированными с маршрутизацией приложения.