我正在为我的应用程序使用 Nuxt.js / Vuejs,并且我在不同的地方一直面临这个错误:
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.
我想了解调试此错误的最佳方法是什么?他们是我可以记录/获取客户端和服务器的虚拟 DOM 树以便我可以比较并找到错误所在的一种方式吗?
我的应用程序很大,手动验证很困难。
原文由 asanas 发布,翻译遵循 CC BY-SA 4.0 许可协议
部分答案:使用 Chrome DevTools,您可以本地化问题并准确查看导致问题的元素。执行以下操作(我使用 Nuxt 5.6.0 和 Chrome 64.0.3282.186 执行此操作)
msg
变量上来检查消息。hydrate
函数调用patch
中的执行行上方 4 行。指向hydrate
源的超链接将打开。hydrate
function, move about 15 lines from the start and set a breakpoint wherefalse
is returned afterassertNodeMatch
returnedfalse
.在那里设置断点并删除所有其他断点。hydrate
函数中停止。切换到 DevTools 控制台并评估elm
然后vnode
。这里 elm 似乎是一个服务器渲染的 DOM 元素,而 vnode 是一个虚拟 DOM 节点。 Elm 打印为 HTML,因此您可以找出错误发生的位置。