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,因此您可以找出错误发生的位置。