Константы и перечисления

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


Константы Navigo

Константы в Navigo применяются для хранения неизменяемых значений, таких как конфигурационные параметры роутера, имена событий и специальные символы маршрутов. Основные примеры:

  • Navigo.hash — строка "#" или пустая, в зависимости от того, используется ли хеш-маршрутизация.
  • Navigo.root — корневой путь приложения, который задаётся при создании экземпляра роутера и используется для построения всех маршрутов.
  • Navigo.RESOLVE_ROUTE — служебная константа для внутреннего механизма разрешения маршрута.

Использование констант позволяет:

  • Избежать «магических строк» в коде.
  • Упростить поддержку и рефакторинг маршрутов.
  • Централизовать управление ключевыми значениями роутера.

Пример создания и использования констант:

const ROUTES = {
  HOME: "/",
  ABOUT: "/about",
  CONTACT: "/contact"
};

const router = new Navigo(ROUTES.HOME);

router.on(ROUTES.HOME, () => {
  console.log("Главная страница");
});

router.on(ROUTES.ABOUT, () => {
  console.log("Страница О нас");
});

В этом примере ROUTES выступает в роли собственного перечисления маршрутов.


Перечисления для событий роутера

Navigo использует несколько ключевых событий, с которыми можно работать при настройке роутера:

  • on — добавление обработчика маршрута.
  • resolve — принудительное разрешение текущего URL.
  • notFound — обработка случаев, когда маршрут не найден.

Для удобства можно определить собственное перечисление событий:

const ROUTER_EVENTS = {
  ROUTE_FOUND: "routeFound",
  ROUTE_NOT_FOUND: "routeNotFound",
  ROUTE_RESOLVED: "routeResolved"
};

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


Использование перечислений для опций маршрута

При создании маршрутов в Navigo можно передавать объект с опциями. Для избежания дублирования строковых ключей часто используют собственные перечисления:

const ROUTE_OPTIONS = {
  USE_HASH: true,
  STRATEGY: "ALL" // Возможные значения: "ALL", "LEAF", "BRANCH"
};

const router = new Navigo("/", { hash: ROUTE_OPTIONS.USE_HASH });

Применение перечислений делает код более читаемым и уменьшает вероятность ошибок.


Структурирование маршрутов с помощью констант и перечислений

Для крупных приложений удобно группировать маршруты по функциональным модулям:

const ROUTES = {
  AUTH: {
    LOGIN: "/login",
    REGISTER: "/register"
  },
  DASHBOARD: {
    MAIN: "/dashboard",
    SETTINGS: "/dashboard/settings"
  }
};

router.on(ROUTES.AUTH.LOGIN, () => {
  console.log("Страница логина");
});

router.on(ROUTES.DASHBOARD.SETTINGS, () => {
  console.log("Настройки дашборда");
});

Такое структурирование позволяет:

  • Легко ориентироваться в маршрутах.
  • Изменять пути централизованно.
  • Использовать вложенные перечисления для модульной организации.

Важные рекомендации по использованию

  1. Использовать константы для всех строковых ключей маршрутов и событий. Это снижает риск опечаток и упрощает поиск кода.
  2. Группировать константы по функциональным областям. Для крупных приложений рекомендуется делать отдельные перечисления для каждой подсистемы.
  3. Не использовать магические числа и строки в логике роутера. Всё должно быть вынесено в константы или перечисления.
  4. Использовать readonly-перечисления при работе с TypeScript, чтобы дополнительно гарантировать неизменяемость значений.

Пример полного использования

const ROUTES = {
  HOME: "/",
  ABOUT: "/about",
  CONTACT: "/contact"
};

const ROUTER_EVENTS = {
  ROUTE_FOUND: "routeFound",
  ROUTE_NOT_FOUND: "routeNotFound"
};

const router = new Navigo("/", { hash: true });

router.on(ROUTES.HOME, () => console.log("Главная страница"));
router.on(ROUTES.ABOUT, () => console.log("О нас"));
router.on(ROUTES.CONTACT, () => console.log("Контакты"));

router.notFound(() => console.log("Маршрут не найден"));

router.resolve();

В этом примере константы ROUTES и ROUTER_EVENTS упрощают управление маршрутизацией, обеспечивают модульность и предотвращают ошибки при расширении приложения.


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