Hack Frontend Community

Что такое реквизиты (props) во Vue?

Реквизиты (англ. props) — это способ передачи данных от родительского компонента к дочернему в Vue.js. Они определяют интерфейс компонента, делая его переиспользуемым и конфигурируемым без жёсткой привязки к внутреннему состоянию.

Зачем нужны реквизиты?

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

Объявление реквизитов

Options API

export default {
  name: "UserCard",
  props: {
    // обязательно, тип String
    name: {
      type: String,
      required: true
    },
    // опционально, тип Number, значение по умолчанию
    age: {
      type: Number,
      default: 18
    },
    // простая валидация
    isActive: {
      type: Boolean,
      validator: value => typeof value === "boolean"
    }
  }
};

Composition API

import { defineComponent } from "vue";

export default defineComponent({
  name: "UserCard",
  props: {
    name: { type: String, required: true },
    age: { type: Number, default: 18 },
    isActive: Boolean
  },
  setup(props) {
    // props.name, props.age, props.isActive доступны здесь
    return { props };
  }
});

Не изменяйте props внутри компонента:

props — это входящие данные; для внутреннего состояния используйте data или ref в Composition API.

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

<template>
  <div class="user-card">
    <h2>{{ name }}</h2>
    <p>Возраст: {{ age }}</p>
    <p v-if="isActive">Статус: Активен</p>
  </div>
</template>

<script>
export default {
  props: ["name", "age", "isActive"]
};
</script>

Note:

В Composition API можно деструктурировать props сразу в setup: setup({ name, age, isActive }) { /* … */ }

Шаги работы с реквизитами

1

1. Объявите props

Определите свойство props в компоненте с указанием типа и правил (required, default, validator).

2

2. Передайте значения

В родительском компоненте используйте атрибуты: <UserCard name="Иван" :age="30" :isActive="true" />

3

3. Используйте внутри

Обращайтесь к props как к реактивным переменным: {{ name }}, {{ age }}.

Рекомендации

  • Объявляйте props явно (объектом), чтобы включить типизацию и валидацию.
  • Используйте значения по умолчанию для опциональных props.
  • Если вам нужно трансформировать входящие данные, делайте это в вычисляемых свойствах (computed), а не напрямую в props.

Больше в официальной документации Vue: Документация Vue Props