npx create-nuxt-app
で作ったプロジェクトにて、コンポーネントを自動インポートしようと思ったのですが、以下のエラーがでて小一時間ハマったので同じような状態の人のためにメモを残しておきます。
[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
, or missing
. Bailing hydration and performing full client-side render.このエラーの原因は、コンポーネントの自動インポート機能を担っているnuxt/componentsにありました。
どうやら、つい最近破壊的変更があったようで、この変更の影響で「components」ディレクトリ以下のディレクトリからコンポーネントをインポートする時は、そのディレクトリ名を接頭辞としてコンポーネントへ指定しなければいけなくなったようです。たとえば、componentsディレクトリが以下のような構造だった場合、ButtonディレクトリのPrimary.vueを使いたい時は、
<Primary>
ではなく、<ButtonPrimary>
と指定します。components/ Button/ Primary.vue
「なんでそんな変更したの」と思っている人は以下からこの破壊的変更の動機を確認できますのでどうぞ。
ざっくりな意訳ですが「現状だとコンポーネント名が重複した時に正しく解決されていなくて大規模ページ作る時に不便だから、ディレクトリ名を接頭辞代わりにするのはいかがかしら」と書かれています。
まあ、おっしゃる通りですね彡(^)(^)
「Nuxt.js」タグがついた最新のチラ裏
最新のチラ裏