在Nuxt.js SSR项目中,客户端激活同步问题是一个常见但容易被忽视的痛点。本文分享一个实际项目中的解决方案。
问题现象:页面首次加载时,服务端渲染的内容与客户端激活后的内容存在短暂不一致,表现为组件状态、数据展示差异。
复现步骤:
- 创建Nuxt.js项目并启用SSR
- 在页面中使用
mounted()钩子处理异步数据获取 - 服务端渲染时数据已加载,但客户端激活时再次触发相同逻辑
解决方案:通过以下代码实现同步控制
// nuxt.config.js
export default {
ssr: true,
render: {
bundleRenderer: {
shouldPreload: (file, type) => {
return type === 'script' || type === 'style'
}
}
}
}
// 页面组件中
export default {
data() {
return {
isClient: false
}
},
mounted() {
this.isClient = true
// 只在客户端执行的逻辑
},
created() {
// 服务端执行的逻辑
}
}
通过isClient标志位控制,避免服务端与客户端的重复执行,确保渲染一致性。此方案已在多个电商项目中验证有效。

讨论