Navigo предоставляет минималистичный роутер, но его функциональность можно значительно расширить с помощью плагинов. Плагин — это модуль, который внедряет дополнительное поведение в роутер без изменения его внутреннего кода. Плагины могут обрабатывать события маршрутизации, добавлять middleware, реализовывать аутентификацию, логирование или интеграцию с другими библиотеками.
В основе работы плагинов лежит метод use, который
позволяет зарегистрировать плагин в экземпляре роутера:
import Navigo from 'navigo';
const router = new Navigo('/');
router.use(myPlugin, {option1: true, option2: 'value'});
Здесь myPlugin — это функция, принимающая два аргумента:
экземпляр роутера и объект с настройками плагина. Такой подход позволяет
централизованно управлять поведением всех маршрутов.
Структура плагина обычно включает:
Пример простого плагина для логирования переходов между маршрутами:
function loggerPlugin(router, options) {
router.hooks({
before: (done, params) => {
if (options.logBefore) {
console.log('Переход начинается на маршрут:', params.route);
}
done();
},
after: (params) => {
if (options.logAfter) {
console.log('Переход завершён на маршрут:', params.route);
}
}
});
}
const router = new Navigo('/');
router.use(loggerPlugin, {logBefore: true, logAfter: true});
В этом примере плагин использует хуки before и
after для логирования действий. Этот подход демонстрирует,
как плагин может внедрять функциональность, не затрагивая основной код
приложения.
Плагины в Navigo позволяют реализовать middleware — промежуточную обработку запросов перед вызовом целевого маршрута. Это удобно для проверки прав доступа, предзагрузки данных или реализации редиректов.
function authPlugin(router, options) {
router.hooks({
before: (done, params) => {
if (!options.isAuthenticated()) {
router.navigate('/login');
} else {
done();
}
}
});
}
const router = new Navigo('/');
router.use(authPlugin, {isAuthenticated: () => !!localStorage.getItem('token')});
Здесь плагин проверяет, авторизован ли пользователь, и перенаправляет на страницу входа, если проверка не пройдена. Middleware через плагины интегрируются напрямую с роутером, что делает их мощным инструментом управления маршрутизацией.
Плагины могут добавлять новые методы к экземпляру Navigo, что позволяет расширять стандартный API. Например, можно создать плагин для динамического добавления маршрутов из конфигурационного файла:
function dynamicRoutesPlugin(router, routes) {
routes.forEach(route => {
router.on(route.path, route.handler);
});
}
const routes = [
{path: '/home', handler: () => console.log('Home')},
{path: '/about', handler: () => console.log('About')}
];
const router = new Navigo('/');
router.use(dynamicRoutesPlugin, routes);
Такой подход облегчает масштабирование приложения, особенно если маршруты хранятся в отдельной конфигурации или загружаются динамически.
Плагины позволяют объединять Navigo с другими инструментами, такими как state-менеджеры, аналитика или UI-фреймворки. Например, плагин для интеграции с Redux может автоматически отправлять действия при изменении маршрута:
function reduxPlugin(router, store) {
router.hooks({
after: (params) => {
store.dispatch({type: 'ROUTE_CHANGED', payload: params.route});
}
});
}
import {store} from './store';
const router = new Navigo('/');
router.use(reduxPlugin, store);
Это упрощает синхронизацию состояния приложения с текущим маршрутом, снижая необходимость ручного вызова действий в каждом компоненте.
Использование плагинов делает Navigo гибким и расширяемым инструментом, позволяя создавать сложные SPA с кастомной логикой маршрутизации, интеграцией сторонних библиотек и централизованным управлением маршрутов.