Привет, ребята 👋, надеюсь, у вас отличный день. Я собираюсь рассказать о различных преимуществах и недостатках маршрутизаторов в react-router и о том, как их выбрать.

Есть три типа маршрутизаторов, которые указаны в react-router. Мы подробно рассмотрим каждый из них позже:

1. Маршрутизатор браузера
Использует все, что находится после TLD (.com, .in, .co и т. Д.) Или порта как path. В localhost:3000/xyz /xyz - это path.

2. Маршрутизатор хеширования
Использует все, что находится после# как path. В localhost:3000/#/xyz /xyz - это path.

3. Маршрутизатор памяти
Не использует URL-адрес для отслеживания навигации, это совершенно другая игра.

Давайте перейдем к подробному рассмотрению различных маршрутизаторов.

Хеш-маршрутизатор

Теперь, когда мы понимаем основы хэш-маршрутизатора, давайте посмотрим на код.

import { HashRouter, Route } from 'react-router-dom';

function App() {
    return (
        <HashRouter>
            <Route path="/" exact component={page1} />
            <Route path="/page2" component={page2} />
        </HashRouter>
    );
}

У нас есть компонент App(), в котором мы возвращаем HashRouter с некоторыми маршрутами. У меня есть 2 компонента page1 и page2, которые возвращают h1. Если вы запустите наше маленькое приложение в браузере, вы обнаружите, что реагирующий маршрутизатор автоматически добавляет # перед path.

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

Маршрутизатор памяти

Я как бы пропустил, как маршрутизаторы памяти работают за кулисами. Реагирующий маршрутизатор хранит историю URL-адресов, но не обновляет адресную строку. Давайте посмотрим на пример

Я использую тот же компонент App(), что и выше, с одним крошечным изменением.

import { MemoryRouter, Route } from 'react-router-dom';

function App() {
    return (
        <MemoryRouter>
            <Route path="/" exact component={page1} />
            <Route path="/page2" component={page2} />
        </MemoryRouter>
    );
}

Кроме того, я добавляю компонент Link к своим компонентам page1 и page2.

import { Link } from 'react-router-dom';

function page1() {
    return (
        <div>
            <div>Page 1</div>
            <Link to="/">Go to Page 2</Link>
        </div>
    );
}

function page2() {
    return (
        <div>
            <div>Page 2</div>
            <Link to="/page2">Go to Page 1</Link>
        </div>
    );
}

Если вы запустите приложение, вы обнаружите, что визуализируемые компоненты отличаются, а ссылки работают, однако URL-адрес не изменяется.

Сравнение

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

Традиционный сервер не понимает /page1. Однако обычный сервер развертывания свяжется с нашим сервером и вернет ошибку 404, поскольку /page1 для него является тарабарщиной.

Вы можете подумать: «Как работает наш сервер разработки приложений create-response-app?». Сервер разработки create-response-app сначала проверит, есть ли какие-либо ресурсы для разработки (файл js, файл CSS и т. Д.) С /page1. Затем он проверит общую папку. Если ничего из этого не было выполнено, он будет обслуживать файл index.html (связанный с нашим JSX, маршрутизаторами и т. Д.). Наши маршруты затем подхватят это и предоставят соответствующий контент (маршрутизация на стороне клиента).

Хватит браузерных роутеров, давайте поговорим о хэш-роутерах. Мы можем легко настроить наш сервер так, чтобы он игнорировал # и обрабатывал весь HTML-файл независимо от маршрута. Этот хеш будет использоваться нашими маршрутами для отображения соответствующего контента.

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

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

На этом пока все, надеюсь, вам понравился этот пост. Поставьте лайк и подписывайтесь на меня! Пока

Первоначально опубликовано на https://dev.to 12 марта 2021 г.