В React Router работа с маршрутами часто включает использование параметров, передаваемых в URL. Иногда возникает необходимость предусмотреть сценарий, когда параметр отсутствует, и тогда на помощь приходят дефолтные значения параметров.
Параметры в маршруте задаются с помощью синтаксиса
:имяПараметра:
<Route path="/user/:id" element={<UserPage />} />
В этом примере :id — параметр маршрута. При переходе на
/user/42 компонент UserPage получает доступ к
значению id через хук useParams:
import { useParams } from "react-router-dom";
function UserPage() {
const { id } = useParams();
return <div>ID пользователя: {id}</div>;
}
Если пользователь перейдёт на /user без указания
id, значение параметра будет undefined. Для
таких случаев полезно задавать дефолтное значение.
Наиболее простой способ задать дефолтное значение — это
деструктуризация объекта params с указанием значения по
умолчанию:
function UserPage() {
const { id = "неизвестен" } = useParams();
return <div>ID пользователя: {id}</div>;
}
Теперь при переходе на /user вместо
undefined будет отображаться "неизвестен".
Этот подход удобен для небольших параметров, когда не требуется сложная
логика обработки.
<Route> и опциональные параметрыReact Router позволяет создавать опциональные параметры с
использованием знака вопроса ?:
<Route path="/user/:id?" element={<UserPage />} />
Параметр id теперь может быть либо задан, либо
отсутствовать. В компоненте можно обработать оба случая:
function UserPage() {
const { id } = useParams();
const userId = id || "неизвестен";
return <div>ID пользователя: {userId}</div>;
}
Здесь оператор || гарантирует использование дефолтного
значения, если id не задан.
<Navigate> и редиректыИногда имеет смысл перенаправлять пользователя на маршрут с дефолтным параметром, если параметр отсутствует:
import { Navigate } from "react-router-dom";
function UserPage() {
const { id } = useParams();
if (!id) {
return <Navigate to="/user/1" replace />;
}
return <div>ID пользователя: {id}</div>;
}
Это решение подходит для сценариев, когда необходимо строгое значение параметра.
Для query-параметров используется хук useSearchParams.
Дефолтные значения задаются аналогично:
import { useSearchParams } from "react-router-dom";
function ProductsPage() {
const [searchParams] = useSearchParams();
const page = searchParams.get("page") || "1";
return <div>Страница продуктов: {page}</div>;
}
Если query-параметр page отсутствует, будет
использоваться "1".
При большом количестве параметров рекомендуется объединять деструктуризацию и логическую проверку:
function Dashboard() {
const { section, tab } = useParams();
const currentSection = section || "overview";
const currentTab = tab || "main";
return (
<div>
<h1>Раздел: {currentSection}</h1>
<h2>Вкладка: {currentTab}</h2>
</div>
);
}
Это позволяет задавать дефолтные значения для нескольких параметров одновременно, избегая лишних проверок и условий.
?)
— полезны, когда параметр может отсутствовать в URL.<Navigate> — подходит
для строгого контроля значений.useSearchParams и логические операторы.Эти подходы позволяют создавать гибкие маршруты, которые корректно работают независимо от наличия параметров, обеспечивая стабильность и предсказуемость интерфейса.