Гидратация клиентской части

В файле entry-client.js, мы просто монтируем приложение такой строкой:

// подразумеваем что шаблон в App.vue имеет корневой элемент с id="app"
app.$mount('#app')

Поскольку сервер уже отобразил разметку, мы, очевидно, не хотели бы её выбрасывать и заново создавать все элементы DOM. Вместо этого мы хотим «гидрировать» статическую разметку и сделать её интерактивной.

Если вы исследовали вывод после серверного рендеринга, вы могли заметить, что у корневого элемента приложения есть специальный атрибут:

<div id="app" data-server-rendered="true">

Специальный атрибут data-server-rendered позволяет клиентской части Vue знать, что разметка отображается сервером, и он должен монтироваться в режиме гидратации.

В режиме разработки Vue будет проверять, что виртуальное дерево DOM, сгенерированное на стороне клиента, совпадает с структурой DOM созданной на сервере. При нахождении несоответствия, он будет считать гидратацию неудачной, отказываться от существующего DOM и рендерить всё с нуля. В режиме production, эта проверка отключена для достижения максимальной производительности.

Предостережения при гидратации

Одна вещь, о которой нужно знать при использовании серверного рендеринга + гидратации на клиенте — некоторые специальные структуры HTML, которые могут быть изменены браузером. Например, когда вы пишете подобное в шаблоне Vue:

<table>
  <tr><td>hi</td></tr>
</table>

Браузер будет автоматически добавлять <tbody> внутрь <table>, в то время как виртуальный DOM генерируемый Vue не содержит <tbody>, что вызовет несоответствие. Чтобы обеспечить правильное соответствие, обязательно пишите валидный HTML в ваших шаблонах.

results matching ""

    No results matching ""