[Lv2] Nuxt 3 Lifecycle 与 Hydration 原理
深入理解 Nuxt 3 的生命周期(Lifecycle)、状态管理(State Management)与 Hydration 机制,避免常见的 Hydration Mismatch 问题。
1. 面试回答主轴
- Lifecycle 差异:区分 Server-side 与 Client-side 执行的 Hooks。
setup两端都会执行,onMounted仅在 Client 端执行。 - 状态管理:理解
useState与ref在 SSR 场景下的差异。useState能在 Server 与 Client 间同步状态,避免 Hydration Mismatch。 - Hydration 机制:解释 Hydration 是如何让静态 HTML 变为可互动应用,以及常见的 Mismatch 原因(HTML 结构不一致、随机内容等)。
2. Server-side vs Client-side Lifecycle
2.1 Lifecycle Hooks 执行环境
在 Nuxt 3 (Vue 3 SSR) 中,不同的 Hooks 会在不同的环境下执行:
| Lifecycle Hook | Server-side | Client-side | 说明 |
|---|---|---|---|
| setup() | ✅ 执行 | ✅ 执行 | 组件初始化逻辑。注意:避免在 setup 中使用仅 Client 端的 API(如 window, document)。 |
| onBeforeMount | ❌ 不执行 | ✅ 执行 | 挂载前。 |
| onMounted | ❌ 不执行 | ✅ 执行 | 挂载完成。DOM 操作、Browser API 调用应放在这里。 |
| onBeforeUpdate | ❌ 不执行 | ✅ 执行 | 数据更新前。 |
| onUpdated | ❌ 不执行 | ✅ 执行 | 数据更新后。 |
| onBeforeUnmount | ❌ 不执行 | ✅ 执行 | 卸载前。 |
| onUnmounted | ❌ 不执行 | ✅ 执行 | 卸载后。 |