当elementui 遇到vue服务端渲染-踩坑指南

element ui table组件 SSR 无法渲染数据-数据为空

公司前端技术一直使用vue ,最近公司由于业务变更,需要自然流量,就是所谓的,需要搜索引擎的收录,但是在立项时没有考虑到服务端渲染,导致好多不符合服务端渲染的代码。

现阶段做vue 服务端渲染的比较成熟的技术栈有两种,一种是nuxt.js 另一种就是官方提供的 VUE SSR 但是由于nuxt的路由机制重构现有项目工程量过于庞大,所有我选择了后者,在做SSR 过程当中遇到最大的坑就是数据预加载,由于SSR 需要将vue组件在服务端进行预渲染,所以数据请求也需要在服务端去做,在服务端做的最大问题就是无法使用浏览器特有的API 如 window doucment XMLHTTPrequest 等 于是前端的请求库选择了axios 作为请求工具类。

但是当做到重构使用到element ui table组件的地方我发现一个很神奇的事情,就是使用服务器端预加载数据,放到el-table组件上时,竟然渲染出来一个空的table,刚开始还是怀疑自己的代码有问题,因为如果使用服务端预加载的数据经过二次转交,就会造成数据在客户端组装,前端只能看到一个空注释<!----> ,但是几番调查,并没有将数据二次转交,于是开始翻element github的issue 没有找到答案,然后无意的点开来pull request 搜索了一下SSR关键词,神奇的发现了一个pr https://github.com/ElemeFE/element/pull/13018

他喵的,竟然合并的pr没有发版,自己看了一下这个pr 还真是解决了table 组件无法正常渲染数据的问题,尝试了一下果然问题解决了,总结一下操作步骤


1. 下载element ui dev分支的代码

2. 将pr里修改的文件,覆盖dev分支中的代码

        modified:   examples/play/index.vue
	modified:   packages/table/src/table-body.js
	modified:   packages/table/src/table-column.js
	modified:   packages/table/src/table-store.js
	modified:   packages/table/src/table.vue

3. npm i && npm run dist

4. 将生成的lib文件夹复制到自己项目的node_modules/element-ui/ 目录中将原来的lib文件夹替换掉,即可


但是一定要注意版本的问题,如果本地的版本和dev分支版本差异过大,需要手动处理。



验证码: 看不清楚?