Для работы с библиотекой Navigo в приложении на React сначала необходимо установить её через npm или yarn:
npm install navigo
# или
yarn add navigo
После установки Navigo импортируется в компонент или модуль, где будет происходить настройка маршрутизации:
import { Router } from 'navigo';
Для корректной работы в React рекомендуется использовать Browser History API, что позволяет сохранять состояние URL без полной перезагрузки страницы. Инициализация маршрутизатора выполняется так:
const router = new Router('/', { hash: false });
Параметр '/' указывает на базовый путь приложения, а
hash: false отключает использование хешей в URL.
Маршруты в Navigo задаются с помощью метода .on(). В
React можно использовать отдельный компонент для управления всеми
маршрутами:
router
.on('/', () => renderPage(<Home />))
.on('/about', () => renderPage(<About />))
.on('/profile/:id', (params) => renderPage(<Profile userId={params.id} />))
.resolve();
Ключевые моменты:
:id — динамический сегмент маршрута, который передается
в функцию обработчик через объект params..resolve() используется для инициализации
маршрутов и проверки текущего URL при загрузке страницы.renderPage выполнял ререндер
нужного компонента в корневом элементе приложения:import ReactDOM from 'react-dom/client';
function renderPage(component) {
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(component);
}
Dynamically generated URLs позволяют создавать маршруты с параметрами, которые можно использовать для передачи данных в компоненты:
router.on('/post/:postId/comment/:commentId', (params) => {
renderPage(<Comment postId={params.postId} commentId={params.commentId} />);
});
В этом примере параметры postId и commentId
извлекаются из URL и передаются в компонент
Comment.
Для изменения маршрута без перезагрузки страницы используется метод
router.navigate(path):
function goToProfile(userId) {
router.navigate(`/profile/${userId}`);
}
Важно учитывать, что после навигации Navigo автоматически вызывает соответствующий обработчик маршрута, что позволяет обновлять состояние приложения и отображать нужный компонент.
Navigo поддерживает работу с query-параметрами через объект
location. Например:
router.on('/search', () => {
const query = new URLSearchParams(window.location.search);
const term = query.get('q');
renderPage(<Search term={term} />);
});
Таким образом, маршруты могут обрабатывать как динамические сегменты URL, так и параметры запроса.
Для сложных приложений можно создавать группы маршрутов с общими обработчиками или middleware. Пример:
router
.on({
'/dashboard': () => renderPage(<Dashboard />),
'/dashboard/settings': () => renderPage(<Settings />)
})
.resolve();
Middleware-функции позволяют проверять авторизацию или выполнять подготовку данных перед отображением компонента:
router
.before((done, params) => {
if (!isAuthenticated()) {
router.navigate('/login');
} else {
done();
}
});
Здесь done() необходимо вызвать для продолжения
маршрутизации после выполнения проверок.
Для синхронизации состояния приложения с маршрутизатором можно использовать useState и useEffect:
import { useState, useEffect } from 'react';
import { Router } from 'navigo';
export default function App() {
const [component, setComponent] = useState(<Home />);
const router = new Router('/', { hash: false });
useEffect(() => {
router
.on('/', () => setComponent(<Home />))
.on('/about', () => setComponent(<About />))
.on('/profile/:id', (params) => setComponent(<Profile userId={params.id} />))
.resolve();
}, []);
return component;
}
Преимущества такого подхода:
ReactDOM.Для обработки несуществующих страниц можно определить маршрут с
*:
router.notFound(() => setComponent(<NotFound />));
Метод .notFound() вызывается, если текущий URL не
совпадает ни с одним определенным маршрутом, обеспечивая корректное
отображение страницы ошибки.
React.lazy и Suspense для уменьшения времени
первой загрузки.router.resolve() после добавления новых
маршрутов для корректной работы навигации.Эти подходы позволяют построить легковесную, гибкую маршрутизацию в React с использованием Navigo, сохраняя преимущества SPA и управляемого состояния приложения.