Navigo — это легковесная клиентская библиотека для маршрутизации в
JavaScript-приложениях. Она позволяет эффективно управлять навигацией и
поддерживает работу с query-параметрами (часть URL
после ?), что критически важно для построения динамических
страниц с фильтрацией, поиском и состоянием интерфейса.
Query-строки в Navigo можно обрабатывать несколькими способами: через
объект параметров маршрута, через встроенный
метод .getQuery() или вручную парсить URL.
Navigo автоматически выделяет параметры маршрута, указанные в шаблоне пути, но query-параметры нужно обрабатывать отдельно. Например:
import Navigo from 'navigo';
const router = new Navigo('/');
router.on('/products', (params, query) => {
console.log(query);
});
query не является стандартным вторым
аргументом. Для получения query-параметров можно использовать встроенный
объект window.location.search или дополнительные библиотеки
для парсинга (URLSearchParams).Пример с URLSearchParams:
router.on('/products', () => {
const query = new URLSearchParams(window.location.search);
const category = query.get('category'); // получаем значение параметра category
const page = query.get('page'); // получаем значение параметра page
console.log(`Category: ${category}, Page: ${page}`);
});
Ключевой момент: Navigo не парсит query-параметры
автоматически, но интеграция с URLSearchParams делает это
легко и удобно.
Для навигации и программного изменения маршрутов с query-параметрами
используется метод navigate():
router.navigate('/products?category=books&page=2');
В этом случае браузер обновляет URL, а обработчик маршрута получает
доступ к параметрам через URLSearchParams:
router.on('/products', () => {
const query = new URLSearchParams(window.location.search);
console.log(query.get('category')); // 'books'
});
Можно динамически формировать query-строку:
const params = { category: 'electronics', page: 3 };
const queryString = new URLSearchParams(params).toString();
router.navigate(`/products?${queryString}`);
Преимущество такого подхода: параметры остаются структурированными, легко модифицируемыми и корректно кодируются в URL.
Navigo позволяет комбинировать динамические сегменты пути и query-параметры:
router.on('/products/:id', () => {
const query = new URLSearchParams(window.location.search);
const id = router.lastRouteResolved().params.id;
const ref = query.get('ref');
console.log(`Product ID: ${id}, Referrer: ${ref}`);
});
:id — динамический сегмент маршрута.ref извлекается отдельно.lastRouteResolved() предоставляет доступ к
последнему обработанному маршруту и его параметрам.Иногда необходимо изменять query-параметры динамически, не меняя основного маршрута:
function updateQuery(params) {
const url = new URL(window.location);
Object.keys(params).forEach(key => url.searchParams.set(key, params[key]));
router.navigate(url.pathname + url.search, { updateBrowserURL: true });
}
updateQuery({ page: 5, category: 'furniture' });
updateBrowserURL: true гарантирует, что URL изменится в
адресной строке.Query-параметры могут содержать массивы или вложенные объекты,
например:
/products?category=books&tags=fiction,history
Для разбора таких структур удобно использовать
split():
const query = new URLSearchParams(window.location.search);
const tags = query.get('tags')?.split(',') || [];
console.log(tags); // ['fiction', 'history']
Если требуется сериализация сложных объектов, лучше использовать JSON:
const filters = { color: 'red', size: 'M' };
const queryString = `filters=${encodeURIComponent(JSON.stringify(filters))}`;
router.navigate(`/products?${queryString}`);
// Извлечение:
const filtersObj = JSON.parse(decodeURIComponent(new URLSearchParams(window.location.search).get('filters')));
console.log(filtersObj.color); // 'red'
encodeURIComponent
гарантирует корректность URL.URLSearchParams:
современный и удобный инструмент для получения, установки и удаления
параметров.router.navigate(): это сохраняет историю браузера
и позволяет корректно работать с кнопками «назад/вперед».Navigo предоставляет гибкую и легкую в использовании систему маршрутизации, а интеграция с query-параметрами через стандартные инструменты JavaScript делает управление состоянием URL и навигацией максимально прозрачным и масштабируемым.