Nuxt vue warn : 服务器内容和客户端虚拟DOM不匹配

发布于 2022-09-07 21:11:54 字数 1764 浏览 17 评论 0

相关配置

nuxt.config.js

    build: {
        vendor: ['axios', 'element-ui', 'vue-lazyload', '~/plugins/vue-infinite-loading.js']
    },
    plugins: [
        { src: '~/plugins/element-ui', ssr: true },
        { src: '~/plugins/vue-lazyload', ssr: true },
        { src: '~/plugins/vue-infinite-loading.js', ssr: false}
    ]

vue-infinite-loading.js是一款只能在浏览器环境执行的js脚本,主要是下拉加载

~/plugins/vue-infinite-loading.js

import Vue from 'vue'
import InfiniteLoading from 'vue-infinite-loading'

if (typeof document !== 'undefined') {
    console.log('broswer环境')
    Vue.component('infinite-loading', InfiniteLoading)
} else {
    console.log('NodeJs环境')
}

结果

运行开发环境,一切ok。不过,有警告:

vue.runtime.esm.js:574[Vue warn]: 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

打包生产,就出问题了,直接挂掉.

参考过的资料

Vue2服务端渲染实践以及相关解读
nuxt项目踩坑
美团点评点餐 Nuxt.js 实战

无果,求助。

2018年3月28日14:51:40 补充

@ MightyVincent

这个警告应该是合理的吧?毕竟:你开启了服务端渲染,然后服务端渲染的页面到客户端后又被你的vue-infinite-loading.js下拉加载修改了,然后自然就警告你说你的服务端渲染的内容和你客户端看到的不一样了咯

方才,测试了下MightyVincent所说的问题,果真如此. 那么,nuxt又是怎么做到只是首页SSR,其他页面不用SSR呢? 持续跟进中。。。。 各位, 求助 , 提供思路也行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

盛夏尉蓝 2022-09-14 21:11:54

问题,解决, ssr会进行初始化时前后dom比较,保证初始化前后一致就ok

玻璃人 2022-09-14 21:11:54

大神,可以问你一个关于nuxt使用vue-lazyload的问题吗。就是我在nuxt项目使用了vue-lazyload,但是一直包虚拟DOM树与服务器呈现的内容不匹配。请问该如何解决呢

青丝拂面 2022-09-14 21:11:54

clipboard.png
script方式导入element,组件很容易导致生命周期调用两次。
plugs方式导入
plugins: [

{
  src: '~/plugins/element.js',
  ssr: true
}

],倒不会应为行内元素和块级元素同级导致生命周期执行两次。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文