1. Vue服务器端通信技巧介绍
Vue服务器端通信(Server-Side Rendering)技术旨在将服务器端的渲染与客户端交互结合起来。与传统的单页面应用(SPA)不同,由于在服务端进行模板编译后,将数据直接填充到HTML模板中,因此可以:
提高应用的SEO效果;
加快首屏加载速度;
方便与已有的后端代码进行整合;
2. 如何避免数据丢失
在使用Vue服务器端渲染技术,需要注意的一点是,在服务器端执行的JavaScript仅能访问那些已被导出的模块,意味着模板内的表达式(如:data里的状态)不能直接使用,解决这一问题的方法是将数据序列化成字符串,再放置在页面内的<script>
标签内。在客户端渲染之前,该标签内的数据被提取并注入到Vue实例中。这样做可以保证数据的完整性。
2.1 数据序列化
序列化数据可以防止数据在传输过程中被串改,可以使用JSON.stringify方法实现:
const serverData = JSON.stringify({ temperature: 0.6 });
2.2 在HTML页面中嵌入数据
在HTML页面中嵌入数据时,需要使用v-text指令或mustache语法,在标签内绑定数据,例如:
<div v-text="temperature"></div>
或者:
<div>{{ temperature }}</div>
2.3 客户端注入数据
最后,在客户端运行之前,需要将HTML页面中的数据提取并注入到Vue实例中,可以使用Vue.mixin方法全局混入一个beforeCreate钩子函数,实现客户端注入数据:
Vue.mixin({
beforeCreate() {
const serverData = window.__INITIAL_STATE__;
if (serverData) {
// 删除全局变量
delete window.__INITIAL_STATE__;
// 将数据注入到Vue实例中
this.$data = Object.assign(this.$data, JSON.parse(serverData));
}
},
});
通过这样的方法,在客户端运行之前读取服务端传递的全局变量,解析成JSON对象后,使用Object.assign方法将其注入到当前Vue实例中,从而保证了数据在客户端和服务端之间的一致性。