Если это поможет, вы можете прочитать тесты viperHTML , чтобы узнать, как можно использовать компоненты.
Дело в том, что без явного вызова render () я не получаю вывод.
Компоненты предназначены для визуализации макета на сервере или на стороне клиента. Это означает, что если вы передаете экземпляр компонента в представление hyper / viperHTML, вам не нужно беспокоиться о вызове, это сделано для вас.
const {bind, Component} = require('viperhtml');
class Hello extends Component {
constructor(props) {
super().props = props;
}
render() {
return this.html`<h1>Hello, ${this.props.name}</h1>`;
}
}
console.log(
// you need a hyper/viperHTML literal to render components
bind({any:'ref'})`${Hello.for({ name: 'Joe' })}`
// by default you have a buffer to stream in NodeJS
// if you want a string you need to use toString()
.toString()
);
Поскольку NodeJS по умолчанию использует потоковые буферы, любая компоновка, созданная viperHTML, будет буферами и, как таковая, может передаваться в потоковом режиме, пока она составлена (т.е. с Promises в качестве значений интерполяции).
Мне также пока не ясно, как я могу написать изоморфный / универсальный компонент, т. Е. Один файл с разметкой, обработчиками событий и т. Д., Который визуализируется на сервере, а затем обрабатывается на клиенте.
В оригинальной версии hyperHTML был метод под названием adopt()
, целью которого было гидрировать живые узлы через одни и те же литералы шаблона.
В то время как viperHTML имеет переключатель viperhtml.adoptable = true
для рендеринга приемлемого контента, функция hyperHTML adopt
все еще еще не совсем там , так что в настоящее время вы можете легко обмениваться представлениями между SSR и FE, но вам нужно либо вступить во владение клиентом после того, как страница SSR приземлилась, либо среагировать, в первый раз, по-другому, и вступить во владение клиентом на расстоянии.
Это не оптимально, но я боюсь, что бит гидратации, сделанный правильно, занимает много времени, и я не нашел такого времени, чтобы завершить его и отправить его.
На данном этапе это может быть hyperHTML v3.
Надеюсь, этот ответ помог понять, как работает viperHTML и каков текущий статус.