Vue.jsで、こんなエラー(というか警告)が出た。
![console.error()で ":[Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content."](https://ginpen.com/wp-content/uploads/2018/01/mismatching-childnodes-vs-vnodes.png)
[Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.
再現コード
はこんな感じ。
<template>
<section>
<p><img />{{text}}</p>
</section>
</template>
<script>
export default {
data () {
return {
text: '',
}
},
}
</script>
たぶん、 <p> の直下には「 <img> 」と「 {{text}} から成るテキストノード」の二つがあるはずなんだけど、文字列が空だとそこにテキストノードが用意されないので、なんか予定と違うぞーと怒ってる感じだろうか。
解決策
とにかくテキストノードが存在していれば良いので、空白文字とか置いておこう。
text: '' を text: ' ' にするとか、同様に <template> の方にスペース追加するとか。
余白が嫌なら幅なしのやつ ‌ にしよう。
<template>
<section>
<p><img />‌{{text}}</p>
</section>
</template>
とっぴんぱらりのぷう。