Props (properties) — это специальные атрибуты, которые:
props: ['title', 'likes', 'isPublished']
props: {
// Базовая проверка типа
title: String,
// Несколько допустимых типов
likes: [String, Number],
// Обязательное поле с типом Number
commentCount: {
type: Number,
required: true
},
// Значение по умолчанию
isPublished: {
type: Boolean,
default: false
},
// Пользовательская валидация
author: {
validator(value) {
return ['Иван', 'Мария', 'Петр'].includes(value)
}
}
}
<blog-post title="Мой первый пост"></blog-post>
<blog-post :title="post.title" :likes="post.likes"></blog-post>
<blog-post v-bind="post"></blog-post>
Эквивалентно:
<blog-post :id="post.id" :title="post.title"></blog-post>
Именование: В HTML используйте kebab-case, в JS — camelCase
<blog-post post-title="Привет"></blog-post>
props: ['postTitle']
Изменение props: Прямое изменение props вызывает предупреждение. Вместо этого:
Не-пропсовые атрибуты: Автоматически добавляются к корневому элементу компонента (можно отключить через inheritAttrs: false)
<template>
<div class="user-card">
<h2>{{ fullName }}</h2>
<p>Возраст: {{ age }}</p>
<p v-if="isPremium">Премиум пользователь</p>
</div>
</template>
<script>
export default {
name: 'UserCard',
props: {
firstName: {
type: String,
required: true
},
lastName: {
type: String,
default: ''
},
age: {
type: Number,
validator: value => value >= 0
},
isPremium: Boolean
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`.trim()
}
}
}
</script>
<style scoped>
.user-card {
border: 1px solid #ddd;
padding: 20px;
border-radius: 8px;
}
</style>
<template>
<user-card
:first-name="user.firstName"
:last-name="user.lastName"
:age="user.age"
:is-premium="user.isPremium"
/>
</template>
<script>
import UserCard from './UserCard.vue'
export default {
components: { UserCard },
data() {
return {
user: {
firstName: 'Иван',
lastName: 'Петров',
age: 30,
isPremium: true
}
}
}
}
</script>
Props — это механизм передачи данных от родительских компонентов к дочерним с возможностью типизации и валидации, обеспечивающий четкий односторонний поток данных и предсказуемость работы компонентов.