Какой роутер используется в React: нативный или сторонний
Что проверяют
Знаете ли вы, что в самом React роутера нет, и понимаете ли, как клиентская маршрутизация стыкуется с сервером на Node.js. Бэкенд-разработчика следом обычно спрашивают: что должен отдать сервер на прямой заход по адресу /orders/42 и как устроен SSR.
Как отвечать
Короткий ответ: встроенного роутера в React нет, это библиотека для UI. Маршрутизацию берут из библиотеки или фреймворка:
- React Router: самый распространённый вариант. С седьмой версии
react-router-domслит сreact-router, импортировать рекомендуется изreact-router, а бывший Remix стал его режимом фреймворка с загрузчиками данных и SSR; - TanStack Router: упор на типизацию параметров и search-строки, его выбирают в TypeScript-проектах;
- роутер фреймворка: в Next.js файловая маршрутизация (App Router или Pages Router), отдельную библиотеку туда не ставят.
«Нативный» вариант тоже возможен: History API (history.pushState и событие popstate) плюс состояние с текущим путём. Для двух-трёх экранов это нормально, но вложенные маршруты, параметры, ленивую загрузку и обработку ошибок придётся писать самим.
Дальше то, что ждут от Node.js-разработчика:
- fallback для SPA: Express или Fastify на любой неизвестный путь должны вернуть
index.html, иначе обновление страницы на/orders/42даёт 404. API-маршруты объявляются раньше, чтобы fallback их не перехватил; - SSR: при серверном рендере роутер получает URL запроса, а не читает
window.location. В React Router для этого естьStaticRouterи серверные API загрузчиков данных; - два уровня маршрутов: серверные отдают данные и документ, клиентские переключают экраны без перезагрузки.
Где спотыкаются
Называют React Router частью React. Это отдельная библиотека со своими мажорными версиями и ломающими изменениями между ними.
Путают маршруты Express и клиентский роутер и не могут объяснить, откуда берётся 404 при обновлении страницы.
Отвечают по пятой версии React Router: Switch и проп component с шестой версии заменены на Routes и element, код из старых статей давно не работает.