Функции рендеринга (render functions) и шаблоны (templates) — это два способа определения структуры компонента в Vue. Рассмотрим ключевые преимущества функций рендеринга.
Функции рендеринга предоставляют программный доступ к Virtual DOM:
render(h) {
return h('div', {
class: {
'active': this.isActive
},
on: {
click: this.handleClick
}
}, this.message)
}
В шаблонах:
<div v-if="condition">Content</div>
В функциях рендеринга:
condition ? h('div', 'Content') : null
Пример динамического создания заголовков:
render(h) {
const children = this.items.map(item =>
h(`h${item.level}`, item.text)
)
return h('div', children)
}
Функции рендеринга:
Легко создавать обертки для компонентов:
render(h) {
const vnode = this.$slots.default[0]
return h(vnode.componentOptions.Ctor, {
props: {...vnode.componentOptions.propsData, extraProp: true}
})
}
Использование любых JavaScript-функций:
render(h) {
return h('div',
this.generateItems().map(item => h(ItemComponent, { props: { item } }))
}
Прямой доступ к содержимому слотов:
render(h) {
return h('div', [
this.$scopedSlots.default({
text: this.message
})
])
}
Функции рендеринга:
Возможность создавать собственные языки разметки:
render(h) {
return h(Form, {}, [
h(Field, { type: 'text', name: 'username' }),
h(Field, { type: 'password', name: 'password' })
])
}
Доступ к низкоуровневым возможностям Virtual DOM:
render(h) {
const vnode = h('div')
// Модификация vnode перед возвратом
vnode.data.staticClass = 'custom-class'
return vnode
}
функции рендеринга предоставляют более мощный и гибкий API по сравнению с шаблонами, особенно полезны для сложных динамических интерфейсов и библиотек компонентов, но требуют более глубокого понимания работы Vue.