Vuejs 錯誤:客戶端渲染的虛擬 DOM 樹與伺服器渲染的不匹配
P粉006847750
2023-08-27 20:39:55
<p>我在我的應用程式中使用 Nuxt.js / Vuejs,我在不同的地方不斷遇到此錯誤:</p>
<pre class="brush:php;toolbar:false;">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.</pre>
<p>我想了解調試此錯誤的最佳方法是什麼?這是我可以記錄/獲取客戶端和伺服器的虛擬 DOM 樹以便我可以比較並找到錯誤所在的方法嗎? </p>
<p>我的應用程式很大,手動驗證很困難。 </p>
對我來說,這個錯誤發生是因為在 標籤,我把
AsyncData
中取得陣列列表並透過v-for
渲染
區塊中的>v-for 程式碼並解決問題部分答案:使用 Chrome DevTools,您可以定位問題並準確地查看導致問題的元素。執行以下操作(我使用 Nuxt 5.6.0 和 Chrome 64.0.3282.186 執行此操作)
msg
變數上來查看訊息。patch
中執行行上方 4 行的Hydro
函數呼叫上。將開啟指向Hydrate
來源的超連結。enchanted
函數中,從開頭移動大約15 行,並設定一個斷點,在assertNodeMatch
返回後返回false
假
。在那裡設置斷點並刪除所有其他斷點。enchanted
函數中停止。切換到 DevTools 控制台並評估elm
,然後評估vnode
。這裡 elm 似乎是一個伺服器渲染的 DOM 元素,而 vnode 是一個虛擬 DOM 節點。 Elm 會列印為 HTML,因此您可以找出錯誤發生的位置。