Как я могу отобразить результат createElement() в Vue.js без создания компонента
Моя цель - создать набор тестов для визуализации различий в реализации метода внутреннего гиперсценария. createElement()
(иначе известный как h()
) в React, Preact, Inferno, Snabbdom, Vue..
В React я могу вызвать его так (без создания компонента):
ReactDOM.render(
React.createElement('div', { className: 'preview' }, ['Hello World']),
document.getElementById('react-preview')
)
В Preact мы просто делаем:
preact.render(
preact.h('div', { className: 'preview' }, ['Hello World']),
document.getElementById('preact-preview')
)
С Inferno.. я должен импортировать ад и инферно-гиперскрипт:
Inferno.render(
Inferno.h('div', { className: 'preview' }, ['Hello World']),
document.getElementById('inferno-preview')
)
Теперь я все еще пытаюсь понять, как сделать это в Vue, не создавая компонент: я не хочу иметь дело с дополнительной стоимостью создания экземпляров компонентов, я просто хочу визуализировать и сравнивать создание и рендеринг виртуальных dom-файлов. Процесс каждой библиотеки.
Я нашел способ сделать это в этом посте, но он все еще создает новый экземпляр Vue..
new Vue({
render: h => h('div', { className: 'preview' }, ['Hello World'])
}).$mount('#vue-preview')
3 ответа
Это то, что обычно не делается в мире Vue, и поскольку метод Vue "слушает" переменные, по умолчанию он поставляется с экземпляром, который фактически выполняет прослушивание.
В этом основное отличие Vue от других сред, где в других средах вам нужно вызывать функцию рендеринга вручную, Vue изменяет исходные объекты и следит за ними.
Если вас интересует только окончательная структура DOM, просто уничтожьте объект Vue, как только вы закончите.
new Vue({
render: h => h('div', { className: 'preview' }, ['Hello World'])
}).$mount('#vue-preview').$destroy()
Быстрый способ - получить доступ к методу рендеринга.
var app = new Vue({
el: '#app',
data() {
return {
isRed: true
}
},
/*
* Same as
* <template>
* <div :class="{'is-red': isRed}">
* <p>Example Text</p>
* </div>
* </template>
*/
render(h) {
return h('div', {
'class': {
'is-red': this.isRed
}
}, [
h('p', 'Example Text')
])
}
})
Вы должны использовать слоты для этого: