Во Vue.js props используются для передачи данных от родительского компонента к дочернему. Правильная типизация и валидация props обеспечивают стабильность приложения и предотвращают ошибки, связанные с некорректными данными.
Props можно определить несколькими способами. Наиболее простой вариант — массив строк:
export default {
props: ['title', 'count']
}
Каждая строка в массиве указывает имя свойства, которое компонент ожидает получить. Однако такой способ не позволяет задать тип, значение по умолчанию или валидаторы.
Более продвинутый подход — использование объекта:
export default {
props: {
title: String,
count: Number
}
}
В этом случае Vue.js выполняет типовую проверку, и если переданный prop имеет другой тип, в консоли появится предупреждение.
Props могут иметь значения по умолчанию с помощью ключа
default:
props: {
title: {
type: String,
default: 'Без названия'
},
count: {
type: Number,
default: 0
}
}
Если родительский компонент не передаст значение prop, Vue автоматически использует значение по умолчанию.
Для сложных случаев можно использовать функцию
validator, чтобы задать произвольные правила проверки:
props: {
status: {
type: String,
default: 'active',
validator(value) {
return ['active', 'inactive', 'pending'].includes(value)
}
}
}
В этом примере prop status допускает только определённые
строки. При передаче некорректного значения Vue выдаст
предупреждение.
Один prop может принимать значения нескольких типов:
props: {
value: [String, Number]
}
Vue позволит передавать либо строку, либо число. Это особенно удобно для компонентов с гибкой логикой обработки данных.
Для указания обязательных props используется свойство
required:
props: {
username: {
type: String,
required: true
}
}
Если родитель не передаст username, Vue выдаст
предупреждение. Это помогает явно указывать критически важные данные для
компонента.
Props могут быть объектами или массивами. Для проверки типов можно использовать глобальные объекты Jav * aScript:
props: {
options: {
type: Array,
default: () => []
},
settings: {
type: Object,
default: () => ({})
}
}
Для массивов и объектов обязательна функция
default, чтобы каждый экземпляр компонента получал
отдельное значение, а не общий объект.
Во Vue 3 можно использовать TypeScript для строгой типизации props:
import { defineComponent } from 'vue'
export default defineComponent({
props: {
id: {
type: Number,
required: true
},
name: String
}
})
TypeScript позволяет получать автодополнение и статические проверки на этапе разработки, что значительно повышает надёжность кода.
Props являются реактивными. Изменение значения в родительском компоненте автоматически обновляет дочерний:
<ChildComponent :title="parentTitle" />
export default {
props: ['title'],
watch: {
title(newVal) {
console.log('Title изменился на', newVal)
}
}
}
Использование реактивных props позволяет строить динамичные и гибкие интерфейсы.
default.required, если данные критичны для компонента.Эти практики позволяют создавать компоненты, которые легко поддерживать, тестировать и интегрировать в сложные приложения.