我的Vue应用程序使用服务器端呈现 . 当应用程序加载并保持水分时,我想检测客户端上的状况,然后提交变异 .

如果我在安装应用程序之前触摸状态,则会打印此警告 - 正如所料:

[Vue警告]:客户端呈现的虚拟DOM树与服务器呈现的内容不匹配 . 这可能是由不正确的HTML标记引起的,例如在<p>中嵌套块级元素或缺少<tbody> . Bailing水化和执行完整的客户端渲染 .

我以为我会找到 hook that would be called right after the hydration is done .

我尝试在主要组件的 mounted 钩子中提交变异 . 我也试过在 app.$mount(...) 之后和 Vue.nextTick() 这样做 . 所有这些都太早了:在每一种情况下,我都得到了上述警告 .

我找到了两个解决方法:

  • 在子组件中添加一个 mounted 钩子,该钩子将以修改后的状态呈现不同的方式 . 在父钩子之后调用该钩子 . 好的,因为我只需要在一个地方使用它 . 但是当我在两个不同的组件中需要它时会变脏 .

  • 使用了一个不起眼的 setTimeout() . 容易打破,因为我发现没有简单的方法来检查水合作用是否完整,所以我不能轮询 . (水合作用开始时, data-server-rendered 属性被删除 . )

任何想法如何正确解决?