Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

React Router: маршруты и навигация в учебном приложении

React Router помогает связать адрес в браузере с содержимым React-приложения. Один маршрут показывает список, другой — отдельную карточку, третий — страницу настроек. Благодаря этому у экранов появляются адреса, между которыми можно переходить, а нужную страницу становится возможно открыть по прямой ссылке. При изучении маршрутизации важно рассматривать адрес, данные и интерфейс вместе. Параметр указывает, какой объект нужен, компонент отвечает за отображение, а само приложение должно понятно вести себя при неизвестном адресе или отсутствии данных. Небольшой учебный сайт позволяет разобрать эти связи без большой серверной системы.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Карточки экранов, соединённые линиями маршрутов, на столе рядом с ноутбуком

Как адрес становится частью устройства приложения

Условный каталог может иметь страницу со всеми материалами и страницы отдельных записей. Адрес /courses относится к списку, а /courses/12 — к одной записи. По такой структуре человек понимает, где находится, и может вернуться к нужному экрану позже.

Маршрутизация описывает соответствие между путём и отображаемым содержимым. В декларативном подходе правила задаются через компоненты маршрутов. React Router сопоставляет текущий адрес с этими правилами и определяет, какую часть интерфейса нужно показать.

Так адрес перестаёт быть внешним украшением приложения. Он хранит часть информации о текущем положении пользователя. Это важно для прямых ссылок, истории переходов и обычного поведения кнопки «Назад», которое человек ожидает от сайта.

Как устроено простое описание маршрутов

В декларативном API можно описать страницу списка и страницу отдельного материала. Общая идея видна в таком фрагменте конфигурации:

<Routes>
  <Route path="/courses" element={<CourseList />} />
  <Route path="/courses/:courseId" element={<CoursePage />} />
  <Route path="*" element={<NotFound />} />
</Routes>

Здесь :courseId обозначает переменную часть пути. В адресе конкретной страницы на её месте находится значение, которое компонент может прочитать через средства маршрутизатора. Последний маршрут предназначен для путей, которым не подошло другое правило.

Этот фрагмент используется внутри настроенного маршрутизатора, например BrowserRouter. Важна связь частей: маршрутизатор получает текущий адрес, правила описывают допустимые пути, а компоненты задают содержимое. В документации React Router такой способ рассматривается как декларативная маршрутизация.

Что означает параметр в адресе

Параметр помогает выбрать объект, но сам по себе не подтверждает, что он существует. Адрес /courses/12 содержит идентификатор, по которому приложение обращается к данным. Если записи с таким значением нет, интерфейс должен отразить именно эту ситуацию, даже если правило маршрута успешно совпало.

Также различаются параметры пути и строка запроса. Путь может обозначать выбранный материал, а параметры после вопросительного знака — сортировку или фильтр списка. Это разделение помогает сделать адрес понятнее и связать его части с разными задачами интерфейса.

В учебном разборе важно учитывать, что значения адреса приходят в текстовой форме. Когда дальнейшая логика предполагает число или определённый набор значений, это становится отдельной частью обработки данных. Маршрут задаёт положение значения в адресе, а смысл и допустимость рассматриваются в приложении.

Как осваивают маршрутизацию в собственном проекте

На курсе «React-разработчик» в Яндекс Практикуме React Router изучается внутри работы над приложением. Навигация связывается со страницами, состоянием и взаимодействием с сервером. Это помогает увидеть, как адрес продолжает логику пользовательского действия, а не существует отдельно от интерфейса.

Открыть курс React-разработчика

Программа включает проектную работу, TypeScript и тестирование. На этой основе можно разбирать переход между списком и выбранным объектом, обработку разных состояний страницы и ожидаемое поведение интерфейса. Для слушателя с базой JavaScript такой формат помогает перейти от отдельных примеров к связанному веб-приложению.

Как вложенность маршрутов связана с общей частью страницы

У нескольких экранов могут быть общие меню, заголовок или панель раздела. Вложенные маршруты помогают связать эту общую часть с изменяющимся содержимым. Родительский компонент отображает окружение, а вложенная страница занимает предусмотренное для неё место.

В декларативном React Router это место обозначается компонентом Outlet. Если вложенный маршрут совпал, но в родительском интерфейсе нет соответствующего места для вывода, ожидаемое содержимое не появится. Такой пример помогает понять, что вложенность существует и в правилах адресации, и в структуре отображения.

Индексный маршрут описывает содержимое по умолчанию для родительского пути. Это полезно, когда у раздела есть стартовый экран и несколько подразделов. В учебном проекте можно последовательно рассмотреть, какая часть остаётся общей и что меняется при каждом переходе.

Чем отличаются ссылка и обработчик перехода

Обычная навигация между экранами выражается ссылкой. Компонент Link помогает выполнить переход средствами маршрутизатора, сохраняя понятный смысл действия для пользователя. Для текущего пункта меню может использоваться NavLink, который связывает оформление с активным маршрутом.

Программный переход нужен в другой ситуации: например, когда дальнейшее действие зависит от завершения определённой операции. Тогда адрес изменяется как часть логики приложения. В обучении эти случаи рассматриваются отдельно, чтобы простой переход оставался ссылкой, а обработчик отражал реальную последовательность действий.

Такое различение помогает сохранять привычное поведение интерфейса. Человек понимает назначение элемента и может пользоваться обычными средствами браузера. Навигация становится частью доступного и предсказуемого взаимодействия, а не только способом сменить содержимое экрана.

Элемент Какую задачу он решает
Маршрут Связывает путь с содержимым
Параметр пути Передаёт значение для выбранной страницы
Строка запроса Описывает дополнительные условия, например фильтр
Outlet Задаёт место для вложенного содержимого
Link Выражает переход между экранами

Почему прямое открытие адреса требует отдельного разбора

Переход внутри уже загруженного приложения и первое открытие адреса происходят по-разному. В первом случае маршрутизатор уже работает в браузере. Во втором запрос сначала получает сервер, который должен вернуть необходимые файлы или обработать адрес предусмотренным для проекта способом.

Поэтому учебный сайт может правильно переходить на вложенную страницу по ссылке и при этом выдавать ошибку после обновления браузера. Причина в такой ситуации может находиться в настройке выдачи приложения сервером. Это помогает отличать правило клиентской маршрутизации от организации размещения сайта.

У разных способов построения приложения этот процесс устроен по-разному. Маршрутизация, которая обсуждается здесь, относится к декларативному React Router. Серверные возможности и файловые маршруты других решений имеют собственную организацию; отдельный пример такого подхода разобран в статье о Next.js.

Как адрес сохраняет условия списка

Адрес /courses?topic=sql&page=2 может обозначать вторую страницу материалов по SQL. Если эти условия отражены в строке запроса, прямую ссылку можно передать другому человеку или открыть позже. Приложение получает основу для восстановления того же положения списка из самого адреса.

Для этого значения должны быть связаны с интерфейсом. Выбранная тема влияет на отбор, а номер страницы — на показываемую часть результата. Если адрес изменился, но элементы управления и данные остались прежними, связь оказывается неполной. Учебный разбор помогает увидеть все её части одновременно.

Что показывает хороший учебный разбор навигации

Связанное приложение позволяет проследить весь переход. Пользователь выбирает запись, адрес получает идентификатор, компонент обращается к соответствующим данным и показывает результат. Если данных нет или путь неизвестен, человек получает понятное объяснение своего положения.

Когда эта последовательность понятна, маршрутизация перестаёт быть набором специальных компонентов. Слушатель видит назначение адреса, умеет объяснить вложенность и различает навигацию и загрузку данных. На такой основе проще развивать приложение: добавлять страницы, сохранять условия фильтрации и поддерживать ожидаемое поведение браузера.