React Router предоставляет гибкий механизм для работы с маршрутами и параметрами URL. Опциональные параметры позволяют создавать маршруты, которые могут работать как с параметром, так и без него, обеспечивая более динамичное управление навигацией в приложении.
Опциональный параметр в маршруте определяется с помощью
вопросительного знака ? после имени параметра:
<Route path="/user/:id?" element={<User />} />
В этом примере параметр id является опциональным. Это
означает, что маршрут будет соответствовать как URL
/user/123, так и /user/.
Для получения значения опционального параметра используется хук
useParams из React Router:
import { useParams } from 'react-router-dom';
function User() {
const { id } = useParams();
return (
<div>
{id ? `Пользователь с ID: ${id}` : 'Список всех пользователей'}
</div>
);
}
Если параметр присутствует в URL, id получит его
значение. Если параметр отсутствует, id будет
undefined, что позволяет реализовать условный рендеринг
компонентов.
Опциональные параметры удобно использовать вместе с вложенными маршрутами. Например:
<Route path="/products/:category?">
<Route index element={<AllProducts />} />
<Route path=":id" element={<ProductDetail />} />
</Route>
Здесь:
/products — отображает компонент
AllProducts./products/electronics — также отображает
AllProducts, но с фильтром категории./products/electronics/42 — отображает компонент
ProductDetail для конкретного продукта.React Router позволяет определять несколько опциональных параметров одновременно. Например:
<Route path="/search/:query?/:page?" element={<Search />} />
/search — отображает страницу поиска без запроса./search/laptops — поиск по ключевому слову
laptops./search/laptops/2 — поиск по ключевому слову
laptops на второй странице.Доступ к параметрам выполняется через объект params:
const { query, page } = useParams();
При этом query и page могут быть
undefined, если они отсутствуют в URL.
Опциональные параметры удобно использовать с навигацией через
компонент Link или хук useNavigate:
import { Link } from 'react-router-dom';
<Link to="/search">Все результаты</Link>
<Link to="/search/laptops">Результаты по "laptops"</Link>
<Link to="/search/laptops/2">Страница 2 результатов</Link>
Навигация автоматически учитывает присутствие или отсутствие параметров, что позволяет создавать динамичные ссылки без лишних условий.
Иногда вместо опциональных параметров лучше использовать query-параметры, особенно если параметров много или они не влияют на структуру маршрута. Пример с query-параметрами:
import { useLocation } from 'react-router-dom';
function Search() {
const { search } = useLocation();
const params = new URLSearchParams(search);
const query = params.get('query') || '';
const page = params.get('page') || '1';
return <div>Поиск: {query}, страница: {page}</div>;
}
Разница в том, что опциональные параметры формируют часть пути, а
query-параметры идут после ? и обычно используются для
фильтров и пагинации.
undefined.Опциональные параметры обеспечивают гибкость маршрутизации, позволяя создавать компактные и понятные маршруты, которые подстраиваются под различные сценарии навигации в приложении.