Перенос приложений React на React Router v6

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

Эта статья предназначена для разработчиков, которые хотят узнать, как перенести свои приложения React Apps с предыдущих версий React Router на React Router v6. Если вы новичок в React Router, эта статья также для вас. Я расскажу вам, как использовать React Router и его последние возможности в ваших проектах React.

Необходимые условия

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

  • Текстовый редактор
  • Node.js, установленный локально на вашей машине
  • Рабочие знания HTML, CSS и JavaScript
  • Знание React

Краткое описание React Router версии 5 (v5)

В React Router v5 мы объявляем все наши маршруты в корневом компоненте App, а компонент BrowserRouter оборачивает все приложение.

//./index.js
<BrowserRouter>
  <App />
</BrowserRouter>
Вход в полноэкранный режим Выход из полноэкранного режима
//./App.js
const App = () => {
  return (
    <div className="App">
      <nav>
        <Link to="/">Home Page</Link>
        <Link to="/about">About Page</Link>
        <Link to="/product">Product Page</Link>
        <Link to="/contact">Contact Page</Link>
      </nav>

      <Switch>
        <Route></Route>
      </Switch>
    </div>
  );
};

export default App;
Вход в полноэкранный режим Выход из полноэкранного режима

Вот как мы настраиваем типичное React-приложение при использовании React Router v5 или старше.
В компоненте App у нас есть раздел nav, раздел nav содержит компонент Link, предоставляемый React Router, который помогает нам переходить на различные страницы приложения.
После раздела nav у нас есть компонент Switch, который оборачивает все маршруты в приложении.
Компонент Switch, по сути, оборачивает все маршруты в приложении и гарантирует, что только один маршрут может быть активен в одно время.
В компоненте Switch регистрируются все отдельные маршруты и компоненты страницы.

<Switch>
  <Route exact to="/">
    <Home />
  </Route>
</Switch>
Вход в полноэкранный режим Выйти из полноэкранного режима

Здесь мы указываем путь в компоненте Route, а компонент страницы, который мы хотим отобразить для этого пути, также вложен в компонент Route.

<Switch>
  <Route exact to="/" component={<Home />} />
</Switch>
Вход в полноэкранный режим Выход из полноэкранного режима

Мы также можем использовать component prop для компонента Route вместо вложения, чтобы указать, какой компонент должен быть отображен для определенного пути.

Если вы новичок в React Router, то теперь вы должны иметь представление о том, как он работает. Если вы уже знаете, как он работает, давайте погрузимся в React Router версии 6.

Переход к React Router версии 6 (v6)

Начало работы

Откройте терминал и создайте новый проект React, выполнив следующую команду:

> npx create-react-app ReactRouterv6Demo
> cd ReactRouterv6Demo
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем установите React Router в качестве зависимости в приложении React:

> npm install react-router-dom@6
Enter fullscreen mode Выйти из полноэкранного режима

Эта команда установит последнюю версию react-router-dom, это версия 6.
После установки зависимости React router нам нужно будет добавить некоторый код в файл src/index.js.

// React Router v6
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { BrowserRouter } from "react-router-dom";

ReactDOM.createRoot(document.getElementById("root")).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);
Вход в полноэкранный режим Выход из полноэкранного режима

Мы импортируем компонент BrowserRouter из react-router-dom, затем обернем компонент App компонентом BrowserRouter, теперь мы настроены на использование компонентов и хуков React Router в нашем приложении.

Конфигурация маршрутов в React Router v6

В предыдущих версиях React Router компонент Switch оборачивал отдельные компоненты Route в приложении.

В React Router v6 отдельные Route помещаются в компонент Routes.

// React Router v6
<Routes>
  <Route />
  <Route />
</Routes>
Вход в полноэкранный режим Выход из полноэкранного режима

Компонент Routes заменяет компонент Switch в React Router v6.

// React Router v6
// ./ App.jsx
import { Routes, Route } from "react-router-dom";
import About from "./components/About";
import Home from "./components/Home";

const App = () => {
  return (
    <div className="App">
      <h1>React Router</h1>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </div>
  );
};

export default App;
Вход в полноэкранный режим Выход из полноэкранного режима

Еще одним изменением в React Router v6 является то, как мы регистрируем компонент страницы, который мы хотим отобразить при переходе по определенному пути.
Здесь мы не вкладываем компонент, вместо этого мы используем element prop, предоставляемый React Router v6, этот element prop устанавливается на компонент страницы, который мы хотим отобразить.
Кроме того, в React Router v6 нам не нужно ключевое слово exact, потому что по умолчанию компонент Route в v6 будет точно соответствовать каждому определенному пути.

Как настроить страницу 404

В предыдущих версиях React Router мы настраивали маршрутизацию для страницы 404 следующим образом;

<Route>
    <NotFound />
<Route/>
Войти в полноэкранный режим Выход из полноэкранного режима

Компонент NotFound — это компонент страницы, который мы хотим отобразить, когда пользователь заходит на несуществующую страницу, также мы не указываем здесь путь.

Далее рассмотрим, как настроить страницу 404 в v6.
Сначала создайте компонент NotFound в папке компонентов.

//./component/NotFound.js
import React from "react";

const NotFound = () => {
  return (
    <div>
      <h1>404 Page</h1>
      <p>The page you are trying to access does not exist</p>
    </div>
  );
};

export default NotFound;
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Далее мы настроим маршрут 404 страницы

<Route path="*" element={<NotFound />} />
Вход в полноэкранный режим Выход из полноэкранного режима

Вот как мы настроим 404page Route в React Router v6, у нас есть путь для всех маршрутов, который называется "*", этот путь, который мы указали, отлавливает всех, кто пытается получить доступ к несуществующей странице, и отображает 404page.


Когда вы заходите на несуществующий маршрут, вы должны увидеть страницу 404, похожую на эту.

Написание inline jsx-шаблонов в компоненте Route

В React Router v6 мы можем встраивать некоторые JSX-шаблоны в реквизит element вместо создания компонента страницы.

<Route
  path="/test"
  element={
    <div>
      <h2>Test Page</h2>
      <p>Hello test page</p>
    </div>
  }
/>
Вход в полноэкранный режим Выход из полноэкранного режима


Страница, подобная этой, отображается в браузере, когда мы входим на сайт /test.

Перенаправления

Далее мы рассмотрим, как мы делаем перенаправления для определенных маршрутов и как мы можем программно перенаправлять пользователей.

В предыдущих версиях React Router для выполнения перенаправления мы использовали компонент Redirect.

В v6 компонент Redirect не существует, вместо него мы используем новый компонент из React Router v6 — компонент Navigate.

<Route path="/redirect" element={<Navigate to="/about" />} />
Вход в полноэкранный режим Выход из полноэкранного режима

Когда пользователь заходит на сайт /redirect, он перенаправляется на страницу About.

Программные перенаправления

Для программного перенаправления пользователей в предыдущих версиях React Router мы использовали хук useHistory.

import {useHistory} from "react-router-dom"
const history = useHistory()

<button onClick={() => history.push("/products")} >Click me</button>
Вход в полноэкранный режим Выйти из полноэкранного режима

В React Router v6 хук useHistory заменен на хук useNavigate, хук useNavigate работает точно так же, как и хук useHistory

import {useNavigate} from "react-router-dom"
const navigate = useNavigate()

<button onClick={() => navigate("/products")} >Click me</button>
Вход в полноэкранный режим Выйти из полноэкранного режима

Разница между использованием хука useHistory и хука useNavigate заключается в том, что нам не нужно вызывать метод push на хуке useNavigate для перенаправления пользователя.

Вложенные маршруты

В предыдущих версиях React Router вложенные маршруты выглядели следующим образом.

<Route path="/about/offers>
  <Offers />
</Route>
Вход в полноэкранный режим Выход из полноэкранного режима

В React Router v6 вложенные маршруты изменились.
Сначала мы импортируем компоненты Routes и Route.

// ./Product.jsx
import { Routes, Route } from "react-router-dom";
import Offers from "./Offers";

<Routes>
  <Route path="/offers" element={<Offers />} />
</Routes>;
Вход в полноэкранный режим Выход из полноэкранного режима

Здесь, в React Router v6, компонент Route будет вложен внутрь компонента Routes, мы используем элемент prop для установки компонента страницы, который мы хотим отобразить, в отличие от предыдущих версий, где мы только вкладывали компонент страницы внутрь компонента Route.

Еще одно изменение в том, как мы делаем вложенные маршруты в v6 — это способ установки пути, вместо того, чтобы записывать родительский путь вместе с вложенным путем, здесь путь вложенных маршрутов становится относительным к родительскому пути.
Путь предложения просто прикрепляется к концу родительского пути (страница продукта).

Далее, в файле App.jsx, где у нас находятся все маршруты приложения, мы должны внести некоторые изменения в компонент Route, который ссылается на страницу продукта Product.

<Route path="/product" element={<Product />} />
Вход в полноэкранный режим Выход из полноэкранного режима

Этот компонент Product Route в настоящее время настроен на точное соответствие пути к продукту, все, что находится после "/product" игнорируется, что означает, что вложенные пути предложений будут проигнорированы.
Чтобы избежать этого, мы добавляем "/*" к пути продукта.

<Route path="/product/*" element={<Product />} />
Вход в полноэкранный режим Выход из полноэкранного режима

"/*" означает соответствие любому слогу или пути, который идет после пути продукта.

Заключение

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

Вы можете ознакомиться с некоторыми из следующих ресурсов, чтобы узнать больше о React Router v6 👇:

  • Документация по React Router

  • Руководство по React Router

Ознакомьтесь с этими ресурсами.

Как всегда, спасибо, что прочитали статью, поставьте лайк 👍, поделитесь ею с другими, а если у вас остались вопросы, задавайте их в комментариях. СПАСИБО, ЧТО ЧИТАЕТЕ! 💖

Если вам понравилось читать эту статью так же, как мне понравилось ее писать, то ставьте лайк и делитесь ею со своими друзьями и не стесняйтесь следовать за мной в Twitter 👨💻.

Оцените статью
devanswers.ru
Добавить комментарий