Режимы передачи props: boolean, object, function

Vue Router предоставляет гибкий механизм передачи данных в компоненты через props. Это позволяет отделить маршрутизацию от логики компонентов и сделать их более переиспользуемыми. В зависимости от типа переданных данных и потребностей приложения, props можно передавать тремя основными способами: boolean, object и function. Каждый способ имеет свои особенности и сценарии использования.


1. Boolean Mode

При использовании boolean mode значение true указывает Vue Router на необходимость автоматически передавать все параметры маршрута (route.params) в компонент как props.

const routes = [
  {
    path: '/user/:id',
    component: UserProfile,
    props: true
  }
];

Особенности boolean mode:

  • Все параметры маршрута, определённые через :paramName, автоматически становятся props компонента.
  • Если параметров маршрута нет, props остаются пустыми.
  • Простота настройки делает этот режим удобным для большинства стандартных случаев.

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

export default {
  props: ['id'],
  mounted() {
    console.log(this.id); // автоматически полученный параметр маршрута
  }
}

Преимущества:

  • Минимум кода для передачи параметров.
  • Компонент полностью независим от объекта маршрута, так как получает данные через props.

Ограничения:

  • Невозможно изменить имя prop.
  • Передать только часть параметров нельзя — будут переданы все.

2. Object Mode

Object mode позволяет передавать фиксированные значения в компонент в виде объекта. Этот режим особенно полезен, когда необходимо передать статические или предопределённые значения, не связанные напрямую с параметрами маршрута.

const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    props: { admin: true, theme: 'dark' }
  }
];

Особенности object mode:

  • Все значения в объекте становятся props компонента.
  • Значения статичны и не зависят от текущего маршрута.
  • Можно использовать для передачи конфигураций, флагов и констант.

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

export default {
  props: ['admin', 'theme'],
  created() {
    console.log(this.admin); // true
    console.log(this.theme); // 'dark'
  }
}

Преимущества:

  • Полный контроль над передаваемыми props.
  • Не нужно обращаться к $route для получения данных.

Ограничения:

  • Невозможно динамически менять значения props в зависимости от текущего маршрута.
  • Менее гибкий, чем function mode.

3. Function Mode

Function mode — самый гибкий способ передачи props. Он позволяет вычислять значения на основе текущего маршрута или любых других данных, предоставляя полную свободу при передаче props.

const routes = [
  {
    path: '/product/:id',
    component: ProductPage,
    props: route => ({ productId: route.params.id, referrer: route.query.ref })
  }
];

Особенности function mode:

  • Функция принимает объект route и возвращает объект props.
  • Можно выбирать конкретные параметры маршрута, а также добавлять вычисляемые значения.
  • Позволяет создавать компоненты, полностью независимые от структуры маршрута, получая только нужные данные.

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

export default {
  props: ['productId', 'referrer'],
  mounted() {
    console.log(this.productId); // значение из route.params.id
    console.log(this.referrer);  // значение из route.query.ref
  }
}

Преимущества:

  • Динамическая генерация props.
  • Возможность комбинировать параметры маршрута и статические значения.
  • Подходит для сложных сценариев, где необходимо преобразовать данные перед передачей.

Ограничения:

  • Немного более сложная настройка по сравнению с boolean и object mode.
  • Требует внимания к структуре возвращаемого объекта props.

Сравнение режимов

Режим Автоматическая передача параметров Динамическая генерация Статические значения Простота
Boolean Да Нет Нет Высокая
Object Нет Нет Да Высокая
Function Нет Да Да Средняя

Рекомендации по использованию

  • Boolean mode подходит для быстрых маршрутов с простыми параметрами, когда нужно просто передать params.
  • Object mode эффективен для статических настроек компонентов и передачи конфигураций.
  • Function mode идеален для сложных маршрутов с фильтрацией параметров, преобразованием данных и добавлением вычисляемых props.

Использование props в Vue Router делает компоненты более чистыми, предсказуемыми и легкими для тестирования, позволяя полностью отделить логику отображения от механизма маршрутизации.