Vuejs-Fehler: Der vom Client gerenderte virtuelle DOM-Baum stimmt nicht mit dem vom Server gerenderten überein
P粉006847750
2023-08-27 20:39:55
<p>Ich verwende Nuxt.js/Vuejs in meiner App und erhalte an verschiedenen Stellen immer wieder diesen Fehler: </p>
<pre class="brush:php;toolbar:false;">Der clientseitig gerenderte virtuelle DOM-Baum stimmt nicht mit dem servergerenderten Inhalt überein.
Dies wird wahrscheinlich durch falsches HTML-Markup verursacht, beispielsweise durch die Verschachtelung von Elementen auf Blockebene innerhalb von <p> oder durch fehlendes <tbody>.
Feuchtigkeitsversorgung und vollständiges clientseitiges Rendern.</pre>
<p>Ich würde gerne wissen, wie dieser Fehler am besten behoben werden kann. Kann ich auf diese Weise die virtuellen DOM-Bäume von Client und Server protokollieren/abrufen, damit ich vergleichen und herausfinden kann, wo der Fehler liegt? </p>
<p>Mein Antrag ist umfangreich und die manuelle Überprüfung ist schwierig. </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,因此您可以找出错误发生的位置。