Nuxt3最新版改动和基本函数方法
一、版本概述
Nuxt3作为基于Vue3的全栈框架,目前最新稳定版本为3.13+(2024年9月发布),带来了多项架构升级和功能增强。Nuxt4的Alpha版本已于2025年6月发布,但本文聚焦于Nuxt3的稳定特性。
二、核心改动
1. 架构升级
- 底层重构:基于Vite、Vue3和Nitro引擎,冷启动速度较Nuxt2提升70%以上,构建产物体积缩小75%。
- TypeScript原生支持:自动生成类型定义,配置文件
nuxt.config.ts
支持类型校验。
2. 性能优化
- 预渲染数据共享(3.10+实验性):通过
experimental.sharedPrerenderData: true
实现跨页面数据自动去重缓存,减少重复API请求。 - SSR安全ID生成(3.10+):新增
useId()
组合式函数,生成防冲突的唯一ID,优化无障碍访问。 - 细粒度视图转换(3.10+):通过
definePageMeta({ viewTransition: false })
控制页面过渡动画。
3. 开发体验增强
- 自动导入机制:
- 组件(
components/
目录)、组合式函数(composables/
目录)无需手动导入。 - Vue API(如
ref
、computed
)和Nuxt工具函数(如useFetch
)全局可用。
- 组件(
- Nuxt Devtools集成:浏览器中实时查看服务器日志、组件层次和路由信息。
- 路由分组(3.13+):通过括号命名文件夹(如
(auth)/login.vue
)组织路由,不影响URL路径。
4. 渲染模式灵活性
支持混合渲染策略,可按路由配置不同模式:
// nuxt.config.ts
export default defineNuxtConfig({
routeRules: {
'/blog/**': { static: true }, // 静态生成
'/admin/**': { ssr: false }, // 客户端渲染
'/api/**': { cors: true } // API路由跨域配置
}
})
三、基本函数方法
1. 数据获取
useAsyncData
- 功能:服务端/客户端异步数据获取,带缓存和去重。
- 示例:
const { data: posts, pending } = await useAsyncData(
'posts', // 唯一key
() => $fetch('https://api.nuxtjs.dev/posts'),
{ watch: [page] } // 监听page变化自动刷新
)
- 参数:
server: boolean
:是否在服务端获取(默认true
)。lazy: boolean
:是否延迟加载(默认false
,阻塞导航)。
useFetch
- 功能:
useAsyncData
+$fetch
的语法糖,自动推断URL作为key。 - 示例:
const { data: user } = await useFetch('/api/user', {
query: { id: 1 },
onResponse({ response }) {
localStorage.setItem('token', response._data.token)
}
})
懒加载变体
useLazyAsyncData
/useLazyFetch
:非阻塞导航,需手动处理pending
状态。
2. 状态管理
useState
- 功能:跨组件共享响应式状态,SSR友好(自动序列化)。
- 示例:
// 定义
const counter = useState('counter', () => 0)
// 组件中使用
counter.value++
useCookie
- 功能:操作Cookie,支持响应式更新。
- 示例:
const theme = useCookie('theme', { default: () => 'light' })
theme.value = 'dark' // 自动同步到Cookie
3. 路由与导航
useRouter
/useRoute
- 功能:访问路由实例和当前路由信息。
- 示例:
const router = useRouter()
const route = useRoute()
console.log(route.params.id) // 获取动态路由参数
router.push('/about') // 编程式导航
navigateTo
- 功能:SSR安全的导航函数,返回Promise。
- 示例:
await navigateTo({ path: '/search', query: { q: 'nuxt3' } })
4. 元数据处理
useHead
- 功能:动态设置页面元信息(SEO优化)。
- 示例:
useHead({
title: 'Nuxt3文档',
meta: [{ name: 'description', content: 'Nuxt3最新特性' }]
})
definePageMeta
- 功能:页面级元数据(标题、布局、中间件等)。
- 示例:
definePageMeta({
title: '首页',
layout: 'home',
middleware: 'auth'
})
5. 其他常用函数
函数 | 功能描述 | 示例 |
---|---|---|
useRequestHeaders |
获取请求头(服务端) | const headers = useRequestHeaders() |
useRequestURL |
获取当前URL(服务端) | const url = useRequestURL() |
useNuxtApp |
访问Nuxt应用实例 | const { $toast } = useNuxtApp() |
refreshNuxtData |
刷新指定key的缓存数据 | refreshNuxtData('posts') |
四、最佳实践
-
数据获取策略:
- SEO关键数据使用
useFetch
(服务端渲染)。 - 非关键数据使用
useLazyFetch
(客户端懒加载)。
- SEO关键数据使用
-
状态管理:
- 全局状态用
useState
,复杂状态集成Pinia。
- 全局状态用
-
性能优化:
- 通过
pick
选项精简API响应:useFetch('/api/user', { pick: ['name', 'id'] })
。 - 路由级缓存:
routeRules: { '/stats': { swr: 3600 } }
(缓存1小时)。
- 通过