PassFront
  1. PassFront
  2. База знаний
  3. Роутинг

В чем принцип работы React Router?

Роутинг

React Router — клиентский роутер: он синхронизирует UI с URL без перезагрузки страницы, используя History API браузера и условный рендеринг компонентов.

Принцип работы по шагам

Перехват навигации. Клик по <Link> не делает запрос на сервер: preventDefault + history.pushState() меняют URL в адресной строке без перезагрузки.

Отслеживание URL. Роутер подписан на изменения истории (pushState/replaceState/popstate — кнопки назад/вперёд) и хранит текущий location в своём состоянии (через контекст).

Сопоставление маршрутов. При изменении location роутер сравнивает pathname с деревом маршрутов (учитывая динамические сегменты :id, вложенность, ранжирование специфичности) и решает, что рендерить.

Рендеринг. Подходящие компоненты рендерятся; вложенные маршруты — через <Outlet /> в родительском layout'е.

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Layout />}>          {/* layout с <Outlet /> */}
      <Route index element={<Home />} />
      <Route path="users/:id" element={<User />} /> {/* useParams().id */}
    </Route>
  </Routes>
</BrowserRouter>

Инструменты доступа

Хуки: useParams (параметры пути), useNavigate (программная навигация), useLocation, useSearchParams. В v6.4+ добавлены loaders/actions — загрузка данных на уровне маршрута до рендера.

Следствия

  • Сервер должен отдавать index.html на любой путь (fallback), иначе прямой заход на /users/5 даст 404: маршрутизация живёт в браузере.
  • Состояние приложения при навигации сохраняется (SPA) — в отличие от полной перезагрузки при классических переходах.

Коротко для собеседования

React Router перехватывает переходы (pushState вместо запроса к серверу), слушает изменения URL, сопоставляет путь с деревом маршрутов и рендерит нужные компоненты (вложенность через Outlet, параметры через useParams). SPA-следствие: серверу нужен fallback на index.html.

Другие вопросы раздела