一般引入组件报错。是因为组件里面涉及调用浏览器的东西,比如window。document等。而ssr是服务器渲染,还没到浏览器客户端渲染这个环境。所以要想成功引入组件,也就是让npm Vue 组件可以 SSR 支持,只有两种解决方案:
1:通过 v-if 来决定是否渲染该组件 和 Vue 只在前端挂载组件,服务器端不渲染。
2:直接在浏览器模式中执行 beforeMount 挂载组件,。也就是等等ssr渲染完毕,前端再去注册组件, 从而达到解决服务端渲染报错的问题。
第一个就是在引入组件的外层div加入v-if判断是不是处于浏览器的环境。
第二个在beforeMount ,也就是客户端渲染时候,挂载组件。服务器渲染时候,beforeMount是不执行的。这里我引入了vue-seamless-scroll这个滚动的组件,平时vue的引入,componets注册用不上了。
beforeMount() {
// 只会在浏览器执行
this.$options.components.vueSeamlessScroll = () =>import('vue-seamless-scroll');
},
有疑问可以下方评论,我看到会立刻回复。