使用正确的数据获取、水合和服务端模式构建 Vue 3 SSR/SSG 应用
Nuxt 3 模式是一项面向实际任务的技能,主要用于Data 获取;使用 Fetch 调试和缓存请求 SSY 期间使用它;
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
useFetch 在服务端渲染(SSR)期间自动去重并缓存请求 — 应在组件中使用,避免使用 $fetch(它会在服务端和客户端各执行一次,导致重复请求)$fetch 仅适用于事件处理器和服务端路由 — 在 中直接调用会导致水合不匹配(hydration mismatch)useFetch 在 SSR 期间于服务端执行 — 若需仅在客户端获取数据,请通过 process.server 进行判断useFetch 显式指定 key 选项;否则缓存将返回陈旧数据useLazyFetch 不会阻塞导航 — 适用于非关键数据,但需主动处理加载中的状态(pending state)Date.now() 或 Math.random() 会导致水合不匹配 — 应在 setup 中预先计算一次,或使用 包裹localStorage、window)在 SSR 中会崩溃 — 需包裹在 onMounted 钩子中,或通过 process.client 判断执行条件 组件v-if 可能造成错误内容短暂闪烁(flash of wrong content) — 推荐改用 v-show 或骨架屏(skeleton state)components/ 目录下的组件支持基于目录结构的自动导入 — 例如 components/UI/Button.vue 将自动注册为 composables/ 目录下的组合式函数必须以 use* 命名才能被自动导入 — utils.ts 等非 use* 命名的导出不会被自动导入server/utils/ 中的工具函数仅在服务端路由中自动导入 — 客户端代码中不可用// @ts-nocheck 注释或显式导入的方式,按文件禁用自动导入,以避免命名冲突server/api/ 目录下的文件自动映射为 API 路由 — 例如 server/api/users.get.ts 将响应 GET /api/users.get.ts、.post.ts)是定义特定 HTTP 方法处理器所必需的 — 若省略,则该文件将处理所有 HTTP 方法getQuery(event) 获取查询参数,使用 readBody(event) 解析 POST 请求体 — 请勿直接访问 event.reqcreateError({ statusCode: 404 })useState 具备 SSR 安全性,并可在页面跳转间持久化状态 — 普通 ref() 在每次页面加载时都会重置useState 的 key 必须在整个应用范围内唯一 — 键名冲突将导致不同组件静默共享同一份状态storeToRefs() 使用,以保持响应性 — 否则解构后的值将失去响应性useState 的默认值中初始化依赖浏览器 API 的状态 — 因其同样会在服务端执行middleware/ 目录下以 .global.ts 结尾的中间件为全局中间件,会在每个路由上运行 — 执行顺序按文件名字母序排列definePageMeta 中定义的路由中间件将在全局中间件之后执行 — 适合用于特定页面的身份验证检查等场景navigateTo() 时必须显式 return — 若遗漏 return,导航将不会生效,流程将继续进入原目标路由server/middleware/ 中的中间件作用于所有服务端请求(包括 API 路由)runtimeConfig 用于存放服务端密钥,runtimeConfig.public 用于存放可安全暴露至客户端的配置项 — 环境变量可通过 NUXT_ 前缀进行覆盖app.config.ts 用于定义构建时即确定、无需环境变量介入的配置 — 其内容会被打包进应用中nuxt.config.ts 需重启开发服务器 — 修改 app.config.ts 支持热更新(hot-reload)useSeoMeta 用于设置标准 meta 标签 — 提供类型安全,并自动处理 og: / twitter: 等前缀useHead 用于插入自定义标签、脚本及链接 — 更加灵活,但对 meta 名称无类型保护definePageMeta 中声明的元信息为静态内容 — 动态值应在 setup 中使用 useSeoMetanuxt.config 中的 titleTemplate 用于统一标题格式 — 推荐采用 %s - My Site 模式nuxtApp.hook('app:created')provide 注入的值可通过 useNuxtApp() 访问 — 但通常推荐优先使用组合式函数(composables)01.plugin.ts)优先执行,其余按字母序 — 若存在依赖关系,需通过显式命名控制顺序.client.ts 为后缀;仅服务端插件需以 .server.ts 为后缀nuxt generate 生成静态文件 — 但 API 路由在无服务端支持的情况下无法工作nuxt.build 生成服务端产物 — 部署时应上传整个 .output 目录routeRules 启用增量静态再生(ISR):例如 '/blog/**': { isr: 3600 } 表示页面缓存 1 小时routeRules: { '/about': { prerender: true } } 表示在构建时生成该路由的静态 HTML相关专题
热门下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.5万人学习
最新文章