Функциональные компоненты — это особый тип компонентов в Vue, которые не имеют собственного состояния (stateless), не имеют экземпляра (no-instance) и работают исключительно на основе входных параметров (props). Они представляют собой чистые функции, которые принимают props и возвращают VNodes.
Vue.component('my-functional-component', {
functional: true,
props: ['message'],
render(createElement, context) {
return createElement('div', context.props.message)
}
})
const FunctionalComponent = (props, context) => {
return context.slots().default
}
Функциональные компоненты получают второй аргумент — context, который содержит:
{
props: Object, // Переданные параметры
children: Array, // Дочерние VNodes
slots: Function, // Функция, возвращающая slots объект
data: Object, // Все атрибуты и обработчики
parent: Component, // Родительский компонент
listeners: Object, // Зарегистрированные обработчики событий
scopedSlots: Object // Scoped slots (2.6+)
}
Vue.component('smart-button', {
functional: true,
props: ['type', 'text'],
render(h, { props }) {
return h('button', {
class: `btn btn-${props.type}`
}, props.text)
}
})
const BorderWrapper = {
functional: true,
render(h, { children }) {
return h('div', { class: 'border-wrapper' }, children)
}
}
const ItemList = {
functional: true,
props: ['items'],
render(h, { props }) {
return h('ul',
props.items.map(item =>
h('li', { key: item.id }, item.text)
)
}
}
Характеристика | Обычный компонент | Функциональный компонент |
---|---|---|
Состояние (data) | ✅ Да | ❌ Нет |
Экземпляр (this) | ✅ Да | ❌ Нет |
Хуки жизненного цикла | ✅ Да | ❌ Нет |
Вычисляемые свойства | ✅ Да | ❌ Нет |
Производительность | ⏳ Средняя | ⚡ Высокая |
Сложность | 📈 Высокая | 📉 Низкая |
// Компонент для отображения статуса с иконкой
const StatusIndicator = {
functional: true,
props: {
status: {
type: String,
validator: s => ['success', 'warning', 'error'].includes(s)
}
},
render(h, { props }) {
const icon = {
success: '✓',
warning: '!',
error: '×'
}[props.status]
return h('span', {
class: `status status-${props.status}`
}, [icon, props.status.toUpperCase()])
}
}
функциональные компоненты — это мощный инструмент для создания легковесных, производительных презентационных компонентов. Они идеально подходят для случаев, когда не требуется внутреннее состояние или методы жизненного цикла, позволяя существенно оптимизировать производительность приложения.