Vue.jsで、こんなエラー(というか警告)が出た。
[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>
とっぴんぱらりのぷう。