React as библиотека часто используется для создания одностраничных приложений (SPA). SPA, как правило, имеют несколько просмотров страниц. При переходе от просмотра одной страницы к другой перезагрузка просмотра всей страницы является утомительной и не столь изобретательной задачей. Фактически, это уменьшает возможность использования SPA. Чтобы сделать его находчивым и выполнить свой вариант использования, SPA должен при необходимости отображать части представлений, а не перезагружать всю страницу.

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

TLDR:

  • Требования
  • Начиная
  • Первый маршрут с React Router
  • Что такое BrowserRouter?
  • Компонент Link
  • Активные ссылки с NavLink
  • Добавление параметров в маршруты
  • Подключение поддержки Crowdbotics к вашему репозиторию Github
  • Заключение

Требования

Чтобы следовать этому руководству, на вашем компьютере разработчика должно быть установлено следующее:

  • NodeJS v8.x.x или выше установлен вместе с npm / yarn
  • create-react-app установленный глобально на локальном компьютере разработчика, сгенерируйте новый проект React

Бонус: вы также можете использовать npx для создания нового проекта React без установки приложения create-response-app.

Начиная

Чтобы создать новый проект React, выполните следующую команду в желаемом месте на вашем локальном компьютере.

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

React Router в виде библиотеки содержит три разных пакета npm:

  • react-router
  • react-router-dom
  • react-router-native

Каждый из пакетов имеет разные варианты использования. Первый react-router является основным пакетом и используется со следующими двумя пакетами, перечисленными выше. react-router-dom необходимо использовать при создании веб-приложения. Это то, что мы собираемся использовать в этом уроке. Последний react-router-native обычно используется в приложении React Native.

Чтобы добавить React Router в приложение React, выполните следующую команду из окна терминала.

Обратите внимание, что в оставшейся части руководства мы будем использовать yarn в качестве диспетчера пакетов JavaScript для добавления или удаления зависимостей. Если вы хотите использовать npm, вас никто не остановит.

Чтобы запустить приложение React, перейдите в окно терминала и выполните команду npm start. Это запустит сервер разработки. Вас встретит стандартный экран проекта по умолчанию в окне веб-браузера по URL-адресу http://localhost:3000/.

Первый маршрут с React Router

Чтобы создать первый маршрут в приложении React, давайте импортируем BrowserRouter из react-router библиотеки.

Для создания маршрута мы используем <Route> из react-router-dom. Здесь и размещается логика маршрутизации. Он отображает пользовательский интерфейс компонента. У <Route> есть свойство path, которое всегда соответствует текущему местоположению приложения. На основе этой опоры рендерится желаемый компонент. Когда компонент не отображается, Route возвращает null. Имя компонента также передается как prop component. Посмотрите на приведенный ниже фрагмент.

Существует функциональный App компонент, который возвращает BrowserRouter, содержащий самый первый Route компонент. path в настоящее время указывает на компонент Home, который имеет следующую логику пользовательского интерфейса.

Теперь перейдите по URL-адресу порта 3000, и вы увидите, что прямо сейчас выполняется рендеринг Home компонента.

Это минимальный пример. Теперь давайте добавим еще один маршрут с теми же реквизитами, что и Home. Вызовите этот маршрут About с такой же логикой рендеринга, как Home.

Теперь добавьте этот функциональный компонент в качестве второго маршрута под маршрутом Home. Кроме того, добавьте оба маршрута в divelement. Компонент маршрутизатора может содержать единственный дочерний элемент, и добавление div решает эту проблему и позволяет компоненту маршрутизатора иметь столько дочерних элементов, сколько мы хотим.

Попробуйте посетить URL http://localhost:3000/about. Вы заметите, что оба компонента отображаются прямо сейчас на пути /about.

Причина этого в том, что механизм регулярных выражений, который React Router использует для внутреннего использования, считает, что оба маршрута, которые запускаются с косой черты /, равны. Чтобы решить эту проблему, мы можем использовать еще одну важную опору на домашнем маршруте под названием exact.

Этот exact также известен как квалификатор, который указывает, что путь должен точно соответствовать / и ничего после него, например /about. Теперь, если вы посетите окно браузера по URL-адресу http://localhost:3000/about, вы заметите, что на этот раз отображается только компонент about.

Что такое BrowserRouter?

Вы помните, что читали ранее о том, что react-router-dom используется только в случае веб-приложений? Итак, react-router-dom библиотека содержит два типа API маршрутизаторов для использования приложением React. Один называется BrowserRouter, который вы видели в действии в предыдущем разделе. Другой называется HashRouter.

BrowserRouter всегда будет прослушивать URL-адреса типа: http://localhost:3000/about, тогда как HashRouter будет иметь http://localhost:3000/#/about, как следует из названия, использует хэш # между ними. Так почему мы использовали BrowserRouter?

BrowserRouter - популярный выбор среди современных веб-приложений. Основная причина заключается в том, что он использует HTML5 History API для отслеживания истории маршрутизатора вашего приложения React. HashRouter имеет вариант использования для устаревших браузеров, где window.location.hash все еще используется для отслеживания маршрутов в SPA.

Упражнение «Сделай сам» 👇

Вот вам небольшая задача. Измените структуру каталогов, как показано на скриншоте ниже, и разделите два функциональных компонента Home и about в их собственных файлах компонентов, чтобы в будущем, если они вырастут с большим количеством JSX для рендеринга.

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

Компонент Link

Для перехода между веб-страницами в HTML доступен тег привязки <a href=""></a>. Однако использование этого традиционного подхода приведет к обновлению браузера. Чтобы преодолеть это, React Router API предлагает компонент Link, который можно использовать для перехода к определенному URL-адресу или компоненту.

Давайте попробуем создать меню навигации с этими новыми знаниями. Импортируйте Link из react-router-dom в App.js файл. Вот измененный фрагмент App компонента.

Обратите внимание, что в приведенном выше фрагменте все ссылки добавляются перед всеми компонентами маршрута. Атрибуты стиля внутри style пока необязательны. Запустите сервер разработки и посетите окно браузера, и вы увидите всплывающее меню навигации вверху. Попробуйте нажимать ссылки для перехода между различными компонентами.

Везде, где Link отображается в проекте React, привязка <a> будет отображаться в HTML-коде приложения.

Активные ссылки с NavLink

В React Router API NavLink - это расширенная версия компонента Link. Можно сказать, что это особый тип Link, который может стилизовать себя так, чтобы представлять активное состояние при совпадении с текущим маршрутом.

Чтобы продемонстрировать это, давайте сначала заменим все теги Link на NavLink в App.js файле.

На этом этапе каждая NavLink ссылка будет вести себя как обычный Link компонент, что означает, что на данный момент изменений нет. Чтобы сделать ссылку активной, добавьте к ней опору activeClassName. Как показано ниже.

Чтобы настроить соответствующий CSS для работы, откройте файл App.css и добавьте его ниже.

Не забудьте импортировать этот файл внутрь App.js. Кроме того, измените маршрут about, чтобы получить activeClassName.

Вернитесь в браузер, откройте инструменты разработки, как показано ниже, и вы сначала заметите, что маршрут Home имеет имя класса active.

Попробуйте перейти к маршруту About и посмотрите, что произойдет.

При переходе к маршруту About вы заметили, что имя класса active также добавлено к соответствующему маршруту? Однако маршрут Home по-прежнему имеет активный класс, хотя URL-адрес совпадает с /about. Почему?

Принцип работы NavLink почти аналогичен работе компонента Route в React Router API. Чтобы убедиться, что только один маршрут имеет активное состояние класса, попробуйте изменить домашний маршрут в меню навигации, как показано ниже.

На этот раз вы получите желаемый результат.

Добавление параметров в маршруты

В этом разделе вы узнаете, как создавать динамические маршруты и управлять ими на основе параметра URL, такого как :id. Начнем с создания статического массива в App.js файле, который будет служить фиктивными данными.

Идея состоит в том, чтобы продемонстрировать маршрут как /posts, который отображает все сообщения, поступающие из массива. Однако каждое сообщение в массиве будет иметь id или уникальный идентификатор. Используя этот уникальный идентификатор, вы приблизитесь к концепции рендеринга динамического контента, написав логику для URL-адресов, например /posts/:id, где :id будет представлен конкретным id сообщения.

Для начала давайте добавим кучу фиктивных сообщений в состоянии внутри нового файла компонента с именем components/posts.js.

Соответствующие стили, указанные выше, для краткости добавлены в App.css файл.

Теперь импортируйте вновь созданный компонент внутрь App.js, где уже существуют другие маршруты.

В существующем меню навигации есть новый маршрут, который называется «Сообщения».

Откройте Posts.js, чтобы отобразить список сообщений и отображать их в виде списка всякий раз, когда текущее местоположение в веб-браузере совпадает с /posts.

Кроме того, компонент Child считывает все, что поступает из параметров URL, например, в приведенном выше случае id каждого сообщения. Объект match содержит информацию о том, как <Route path> соответствует URL-адресу, в нашем случае это идентификатор каждого сообщения.

Подключение поддержки Crowdbotics к вашему репозиторию Github

Как только все заработает, давайте теперь добавим версию git в этот проект React, а затем добавим поддержку платформы для создания приложений Crowdbotics. Откройте окно терминала и выполните:

Как только все файлы будут зафиксированы, добавьте этот репозиторий в свою учетную запись Github. Платформа для создания приложений Crowdbotics теперь дает вам возможность напрямую подключить репозиторий Github с помощью интеграции GitHub OAuth (что означает, что вам необходимо иметь учетную запись Crowdbotics или войти в нее, используя свою учетную запись Github).

Более подробную информацию об этом процессе можно найти здесь.

Заключение

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

Вы можете найти полное руководство в репозитории Github ниже.