I am using Nuxt.js / Vuejs for mmy app, and I keep facing this error in different places:
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.
I would like to understand what is the best way to debug this error? Is their a way I can record/get the virtual DOM tree for client and server so I could compare and find where the error lies?
Mine is a large application and manually verifying is difficult.
Partial answer: with Chrome DevTools, you can localize the issue and see exactly what element caused the issue. Do the following (I did that with Nuxt 5.6.0 and Chrome 64.0.3282.186)
msg
variable. hydrate
function call 4 lines above the execution line in patch
. Hyperlink to the source of hydrate
would open. hydrate
function, move about 15 lines from the start and set a breakpoint where false
is returned after assertNodeMatch
returned false
. Set the breakpoint there and remove all other breakpoints. hydrate
function. Switch to DevTools console and evaluate elm
and then vnode
. Here elm seem to be a server-rendered DOM element while vnode is a virtual DOM node. Elm is printed as HTML so you can figure out where the error happened.