В React Router ключевую роль играет объект location,
который описывает текущее положение пользователя в приложении. Он
содержит следующие поля:
pathname — путь текущего URL, например
/products/42.search — строка запроса, начинающаяся с ?,
например ?category=books.hash — часть URL после символа #.state — объект, позволяющий передавать данные между
переходами.key — уникальный идентификатор текущего состояния,
который используется для управления историей.Для доступа к объекту location используется хук
useLocation():
import { useLocation } from 'react-router-dom';
function CurrentLocation() {
const location = useLocation();
console.log(location.pathname); // выводит текущий путь
console.log(location.state); // выводит состояние маршрута
}
Кроме location, важен объект history (в
React Router v6 заменён на методы navigate и
useNavigate()), который управляет переходами:
navigate('/path') — программный переход на другой
маршрут.navigate(-1) — возвращение на предыдущую страницу.navigate(1) — переход вперёд в истории.useParams()Используется для получения параметров динамических маршрутов.
Например, маршрут /users/:id:
import { useParams } from 'react-router-dom';
function UserPage() {
const { id } = useParams();
return Пользователь с ID: {id};
}
useLocation()Позволяет инспектировать текущий URL и данные состояния:
import { useLocation } from 'react-router-dom';
function QueryLogger() {
const location = useLocation();
console.log(new URLSearchParams(location.search).get('q'));
return null;
}
useMatch()Позволяет проверять, соответствует ли текущий путь определённому шаблону:
import { useMatch } from 'react-router-dom';
function HighlightIfMatch() {
const match = useMatch('/dashboard');
return match ? Вы на панели : Не панель;
}
useNavigationType()Возвращает тип перехода: POP, PUSH или
REPLACE, что полезно для логики, зависящей от способа
навигации.
import { useNavigationType } from 'react-router-dom';
function LogNavigation() {
const navType = useNavigationType();
console.log(navType);
}
Вложенные маршруты создаются с помощью компонента
и маршрутов, определённых в массиве
конфигурации. Для проверки текущего состояния вложенного маршрута можно
использовать комбинацию useMatch и
useLocation.
import { useMatch, Outlet } from 'react-router-dom';
function Parent() {
const match = useMatch('/parent/:childId');
return (
{match && Текущий дочерний ID: {match.params.childId}
}
);
}
С помощью объекта state можно передавать данные при
навигации:
import { useNavigate } from 'react-router-dom';
function NavigateWithState() {
const navigate = useNavigate();
const handleClick = () => {
navigate('/profile', { state: { fromDashboard: true } });
};
return ;
}
Доступ к переданным данным осуществляется через
useLocation:
import { useLocation } from 'react-router-dom';
function Profile() {
const location = useLocation();
console.log(location.state?.fromDashboard); // true
}
Для реакции на изменения маршрута можно использовать
useEffect совместно с useLocation:
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
function LocationWatcher() {
const location = useLocation();
useEffect(() => {
console.log('URL изменился на:', location.pathname);
}, [location]);
}
Это позволяет реализовывать логику, аналогичную слушателям истории в классическом React Router v5, но с использованием современных хуков.
Для классовых компонентов можно использовать компонент
withRouter (React Router v5) или
с element-функцией в v6:
import { useLocation } from 'react-router-dom';
function LocationDisplay({ location }) {
return Текущий путь: {location.pathname}
;
}
Или с элементом-функцией:
} />
В этом случае Example может использовать
useLocation, useParams и другие хуки для
инспекции состояния.
Каждое состояние в истории имеет уникальный key. Это
позволяет различать разные экземпляры одного и того же пути:
import { useLocation } from 'react-router-dom';
function KeyLogger() {
const location = useLocation();
console.log('Ключ состояния:', location.key);
}
Использование key полезно для сброса состояния
компонента при переходе на тот же путь с другими параметрами.
React Router v6 предоставляет утилиты matchRoutes и
generatePath:
matchRoutes(routesConfig, pathname) — возвращает массив
совпадений маршрутов с текущим URL.generatePath('/users/:id', { id: 42 }) — формирует URL
из шаблона и параметров.import { matchRoutes, generatePath } from 'react-router-dom';
const matches = matchRoutes(routes, '/users/42');
console.log(matches);
const path = generatePath('/users/:id', { id: 42 });
console.log(path); // /users/42
Эти методы помогают программно инспектировать маршруты и их состояние без непосредственного рендеринга компонентов.