При работе с виртуальным DOM в Vue иногда возникает необходимость создавать дублирующиеся виртуальные узлы. Рассмотрим основные способы и лучшие практики.
Самый простой способ - возвращать массив VNodes в render-функции:
render(createElement) {
return [
createElement('div', { key: 'node1' }, 'Первый узел'),
createElement('div', { key: 'node2' }, 'Второй узел')
]
}
Создаем функцию-фабрику для генерации одинаковых узлов:
methods: {
createNode(text) {
return this.$createElement('div', {
class: 'duplicate-node',
attrs: { 'data-text': text }
}, text)
}
},
render(h) {
return h('div', [
this.createNode('Узел 1'),
this.createNode('Узел 2'),
this.createNode('Узел 3')
])
}
Для динамического дублирования на основе данных:
render(h) {
return h('div',
this.items.map((item, index) => {
return h('div', {
key: `node-${index}`,
class: 'item'
}, item.text)
})
)
}
В некоторых случаях может потребоваться клонирование существующих узлов:
render(h) {
const originalNode = h('div', 'Оригинальный узел')
return h('div', [
originalNode,
h(originalNode.tag, originalNode.data, originalNode.children)
])
}
При дублировании узлов всегда указывайте уникальные ключи:
h('div', { key: uniqueId() }, 'Содержимое')
Для большого количества дубликатов используйте:
// Лучше чем отдельные createElement вызовы
const nodes = Array(100).fill().map((_, i) =>
h('div', { key: i }, `Узел ${i}`)
)
Для сложных дублирующихся структур используйте функциональные компоненты:
Vue.component('duplicate-node', {
functional: true,
render(h, { props }) {
return Array(props.count).fill().map((_, i) =>
h('div', { key: i }, `${props.text} ${i}`)
)
}
})
Создание таблицы с дублирующимися ячейками:
render(h) {
const createCell = (content) =>
h('td', { class: 'table-cell' }, content)
return h('table',
Array(5).fill().map((_, row) =>
h('tr', { key: `row-${row}` },
Array(5).fill().map((_, col) =>
createCell(`Ячейка ${row}-${col}`)
)
)
)
)
}
дублирование VNodes в Vue можно реализовать различными способами - от простых массивов в render-функции до сложных фабричных методов. Ключевые моменты - использование уникальных ключей, оптимизация производительности и выбор подходящего подхода для конкретной задачи.