Этот вопрос проверяет понимание базового пути (base URL) в React Router, который нужен для корректной маршрутизации в приложениях, развёрнутых не в корне домена.
В веб-разработке, особенно при развёртывании одностраничных приложений (SPA), часто возникает ситуация, когда приложение размещается не в корневой директории домена, а внутри подпапки. Например, оно может быть доступно по адресу https://company.com/dashboard/ или https://github.com/username/project-name/ (для GitHub Pages). React Router по умолчанию предполагает, что приложение работает от корня (/). Если это не так, все относительные маршруты (например, /users или /settings) будут разрешаться относительно корня сервера, что приведёт к ошибкам 404 или некорректному отображению компонентов.
Проп basename в компоненте <BrowserRouter> (или <HashRouter>) позволяет указать базовый путь для всего приложения. Все маршруты, определённые внутри этого роутера, будут автоматически иметь этот префикс. Это влияет на:
<Link to="...">.<Route path="...">.useNavigate() и useLocation().Вы задаёте basename при создании роутера. Вот практический пример:
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function App() {
// Приложение развёрнуто в поддиректории /admin
return (
<BrowserRouter basename="/admin">
<nav>
<Link to="/">Dashboard</Link> // Фактический путь: /admin/
<Link to="/users">Users</Link> // Фактический путь: /admin/users
</nav>
<Routes>
<Route path="/" element={<Dashboard />} />
<Route path="/users" element={<UsersList />} />
</Routes>
</BrowserRouter>
);
}В этом примере, если пользователь перейдёт по адресу /admin/users, React Router корректно отобразит компонент UsersList, потому что он знает, что базовый путь — /admin.
basename в React Router не заменяет настройку сервера. Ваш веб-сервер (Nginx, Apache) или хостинг (GitHub Pages, Netlify) также должен быть сконфигурирован так, чтобы все запросы в пределах /your-base-path перенаправлялись на ваш index.html (правило "catch-all" для SPA)./) внутри basename, они будут автоматически дополнены. Относительные пути (без ведущего слэша) работают относительно текущего URL.HashRouter принцип тот же, но хэш-фрагмент (#) добавляется после базового пути.Вывод: Используйте basename в React Router, когда ваше приложение развёртывается в поддиректории на сервере. Это необходимое условие для корректной работы маршрутизации, навигации и избежания ошибок 404 в продакшн-окружении.
Уровень
Рейтинг:
3
Сложность:
3
Навыки
React
React Router
Ключевые слова
Подпишись на React Developer в телеграм