Client Side Hydration
Hydration refers to the client-side process during which Vue takes over the static HTML sent by the server and turns it into dynamic DOM that can react to client-side data changes.
Since the server has already rendered the markup, we obviously do not want to throw that away and re-create all the DOM elements. Instead, we want to “hydrate” the static markup and make it interactive.
In development mode, Vue will assert the client-side generated virtual DOM tree matches the DOM structure rendered from the server. If there is a mismatch, it will bail hydration, discard existing DOM and render from scratch. In production mode, this assertion is disabled for maximum performance.
Hydration Caveats
One thing to be aware of when using SSR + client hydration is some special HTML structures that may be altered by the browser. For example, when you write this in a Vue template:<table>
<tr><td>hi</td></tr>
</table>
The browser will automatically inject <tbody>
inside <table>
, however, the virtual DOM generated by Vue does not contain <tbody>
, so it will cause a mismatch. To ensure correct matching, make sure to write valid HTML in your templates.