В React Router wildcard-маршруты используются для обработки динамических или неизвестных URL. Они позволяют задать универсальный маршрут, который срабатывает, когда ни один из перечисленных маршрутов не совпадает с текущим путём. Чаще всего это используется для реализации страницы 404, но также полезно для маршрутов с переменной глубиной.
Wildcard обозначается символом *. В React Router v6 и
выше он применяется следующим образом:
import { Routes, Route } from 'react-router-dom';
import HomePage from './HomePage';
import AboutPage from './AboutPage';
import NotFoundPage from './NotFoundPage';
function App() {
return (
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
<Route path="*" element={<NotFoundPage />} />
</Routes>
);
}
path="*" — означает, что этот маршрут будет совпадать
со всеми путями, которые не были обработаны предыдущими маршрутами.element={<NotFoundPage />} — компонент, который
рендерится, когда URL не соответствует ни одному из заданных
маршрутов.Wildcard можно использовать не только для верхнего уровня, но и внутри вложенных маршрутов. Это позволяет создавать страницы с динамическим содержимым или универсальные fallback-компоненты для вложенных секций.
<Routes>
<Route path="/dashboard" element={<Dashboard />}>
<Route path="stats" element={<Stats />} />
<Route path="*" element={<DashboardNotFound />} />
</Route>
</Routes>
В данном примере:
/dashboard/stats, будет
показан компонент Stats./dashboard, например
/dashboard/reports, отрендерит компонент
DashboardNotFound.Wildcard можно сочетать с динамическими параметрами для более гибкой маршрутизации. Например, для маршрута с произвольным количеством сегментов URL:
<Route path="/files/*" element={<FilesPage />} />
В компоненте FilesPage можно получить оставшийся путь с
помощью хука useParams или useLocation:
import { useLocation } from 'react-router-dom';
function FilesPage() {
const location = useLocation();
const subPath = location.pathname.replace('/files/', '');
return <div>Текущий путь: {subPath}</div>;
}
Это полезно, когда необходимо обрабатывать вложенные каталоги или создавать динамические маршруты файловой структуры.
* должен идти последним,
иначе он перехватит все запросы.Navigate для перенаправления на 404-путь:import { Navigate } from 'react-router-dom';
<Route path="*" element={<Navigate to="/not-found" replace />} />
useParams или
useLocation для точного получения и обработки оставшейся
части маршрута.<Route path="/blog/*" element={<BlogPage />} />
В компоненте BlogPage можно обрабатывать URL вида
/blog/category/post-title.
<Route path="*" element={<GenericNotFound />} />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/products/*" element={<Products />} />
<Route path="*" element={<PageNotFound />} />
</Routes>
PageNotFound, а подмаршруты
/products/* обрабатываются отдельно.Wildcard-маршруты в React Router обеспечивают мощный инструмент для гибкой маршрутизации и корректной обработки ошибок. Они позволяют создавать универсальные страницы 404, поддерживать динамические пути и управлять вложенными маршрутами без лишней сложности.